[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/04 11:46 / Filesize : 212 KB / Number-of Response : 986
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build62



1 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:40:03 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

【前スレ】
61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/

692 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:26:20 ]
このスレ用のwikiなんてあったんだな
どういう経緯で作られたの? まったく更新されてないようだけど

693 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:31:53 ]
V2 というネーミングセンスに吹いたw

694 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:02:08 ]
>>692
更新されてないどころか内容も無いし次からテンプレから消してもいいかもな

695 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:50:16 ]
>>690
まだまだ叩かれる余地がある。
ttp://msdn2.microsoft.com/en-us/library/ms683197.aspx

まず、2k/XPでは、ファイルパスがMAX_PATHより長かった場合、NULL終端されない。
MAX__PATHより長かった場合、\\?\を使った長いファイルパスを返す。
したがって、filename配列は32000ぐらい確保すれば安全だ。

あと、NTIMEなんていう汚いマクロ使うな。

696 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:56:29 ]
NULL終端はされるんじゃないか?
>the string is truncated to nSize characters including the terminating null character.
「null 文字も含め nSize 文字分に切り捨てる」でしょ?

697 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:04:58 ]
Windows XP/2000: The string is truncated to nSize characters and
is not null terminated.
~~~~~~~~~~~~~~~~~~~~

698 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:11:25 ]
あ、本当だ。失礼しました

699 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:20:22 ]
>The global variable _pgmptr is automatically initialized(略)
身も蓋もないとはまさにこのこと(w

700 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:22:52 ]
そもそも_MAX_PATH(アンダースコア付き)なんてWin32APIで使う物では無かろう



701 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:45:36 ]
動けばいいじゃん
こういうどうでもいいとこをグチグチ言ってくる奴多杉

702 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:51:39 ]
お前アホだろ
特定の状況でまともに動かないからレスがついてんだろうが

703 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:51:54 ]
>>701
お前みたいな思想を持つ奴が、Windowsのバージョンアップ程度で、動かなくなる糞コードを書く。

704 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:56:12 ]
偉そうなことを言う奴に限ってコードの出し惜しみ(というかかけない)とか
ちょっとレベルの高い話になると何も答えられないんだよな。


705 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:58:26 ]
先生!ファイル名をnul.exeにしたんですけど、
どうやって起動すればいいですか!?

706 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:36:17 ]
RunDLL32 shell32.dll,ShellExec_RunDLL nul.exe

707 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:09:00 ]
C:\>RunDLL32 shell32.dll,ShellExec_RunDLL c:\nul.exe
指定されたデバイス、パス、またはファイルにアクセスできません。
アクセス許可がない可能性があります。

708 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:33:01 ]
なにがしたいねん

709 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:56:06 ]
prn とか、DOS時代からある予約名を
たまに思い出したかったんだろう

710 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:58:24 ]
C:\>dir nu*
ドライブ C のボリューム ラベルがありません。
C:\ のディレクトリ

2008-01-21 22:09 130,765 NUL
2008-02-03 07:45 53,248 nul.exe



711 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:02:56 ]
>>678 屑コード晒す
>>690 書き直してもやっぱり屑コード
>>701 「動けばいいじゃん」

・・・w

712 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:07:59 ]

| ∧         ∧
|/ ヽ        ./ .∧
|   `、     /   ∧
|      ̄ ̄ ̄    ヽ
| ̄ ̄ ̄月曜日 ̄ ̄ ̄)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\  煽りはいらない
|ヽ-=・=-′ ヽ-=・=-  /   ただ私に絶望したまえ
|::    \___/    /
|:::::::    \/     /

713 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:27:46 ]
動けばいいじゃんって言う奴ほど汚いコードかくんだよな
むしろ動けばいいって言う前提で書いてるからなんだろうがw

そういう奴は個人でソースを管理する趣味グラマーでいてくれ

714 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:49:09 ]
モジュール単位で仕様がハッキリしておけば中身のコードなんてどうでもいいじゃん

と趣味グラマーが申しております

715 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:52:38 ]
その中身を保守する人のことを考えろ

716 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:54:25 ]
仕様通り動いてくれるなら正直悪くは無い。
仕様通り動かない、そもそも仕様自体が二転三転するとかだと楽し過ぎるからな。

717 名前:デフォルトの名無しさん [2008/02/24(日) 20:21:51 ]
MessageBoxだとビープ音が鳴ってしまうのですが、
音を消すことはできますか?
もしくは、MessageBoxに似た音の出ないapiはありますか?


718 名前:664 mailto:sage [2008/02/24(日) 20:30:38 ]
664でGetModuleFileName()関連の質問をした者です。
変な質問をしてすみませんでした。


>>676で言われているように、
最小コードを作ったのですが、なぜかこちらではエラーが発生せず、
質問しようにも出来ない状態です。

自分で少しずつ調査して行こうと思います。
お騒がせしてしまって申し訳ありませんでした。

MUI化していないときはエラーになっていなかったので、
とりあえずはMUIあたりから調べてみます。

ありがとうございました。

719 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:55:24 ]
>>717
MessageBoxのようなダイアログボックスを作るしか無いんじゃないの?
たまーにMB_NOSOUNDとか欲しくなるんだけどね・・・

720 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:01:23 ]
>>719
ありがとう



721 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:53:35 ]
先生!
>>690のコードをプロレベルのコードに修正お願いします。

722 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:12:30 ]
屑コードと言う人は、とりあえず
そのコードを正しく直してから批判しな?

723 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:28:42 ]
>>678 屑コード晒す
>>690 書き直してもやっぱり屑コード
>>701 「動けばいいじゃん」
>>722 「正しく直してから批判しな」

724 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:32:47 ]
「?」でこのスレを検索すると、特徴的な使い方している香具師が浮かび上がってくるね。

725 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:32:48 ]
マイタ・デッヤーレ

726 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:35:06 ]
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>

#define CHECK(b) if(b); else goto ERROR

int _tmain(void) {
 int exit_status = EXIT_FAILURE;

 LPTSTR filename = NULL;
 DWORD len;
 TCHAR dummy;

 len = GetModuleFileName(NULL, &dummy, 1);
 CHECK(len != 0);

 filename = malloc((len + 1) * sizeof (TCHAR));
 CHECK(filename != NULL);

 len = GetModuleFileName(NULL, filename, len + 1);
 CHECK(len == 0);

 _tprintf(_T("%.*s\n"), len, filename);

 exit_status = EXIT_SUCCESS;

ERROR:
 free(filename);
 return exit_status;
}

727 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:35:45 ]
>>699
そういうのって C++ のグローバルオブジェクトのコンストラクタから
正しく使えるんだろうか。
もっとも、GetModuleFileName も正しく使えるかどうか。

728 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:56:18 ]
>>726
> CHECK(len == 0);
これは拙く内海?

729 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:59:04 ]
間違えた。
0 の時は 「失敗」 なのか。

730 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:21:32 ]
>>726
> len = GetModuleFileName(NULL, &dummy, 1);
で成功すればlen=1だから

> filename = malloc((len + 1) * sizeof (TCHAR));
filenameのバッファが全然足らねーだろ
つーかcalloc使えよ

相変わらず屑コード全開だな



731 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:00:24 ]
質問と回答とこの俺のレス以外はいりません

732 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:01:02 ]
なんでcalloc使わないといけないんだ?w

733 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:06:13 ]
>>678 屑コード晒す
>>690 書き直してもやっぱり屑コード
>>701 「動けばいいじゃん」
>>722 「正しく直してから批判しな」
>>726 屑コードどころかバグありコード晒して恥の上塗り
>>732 「なんでcalloc使わないといけないんだ?w」

734 名前:1 ◆GqrOSDYjeQ mailto:sage [2008/02/25(月) 01:11:01 ]
>>726
#define CHECK(b) if(b); else goto ERROR

このコードは個人的に盗ませてもらうかもしれない
いいもん見せてもらったw


735 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:20:11 ]
煽ってるやつは同一人物か?
違うよな?な?でないとおかしいもんな

736 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:25:48 ]
煽ってるやつは同一人物か?
違うよな?な?でないとおかしいもんな

737 名前:731 mailto:sage [2008/02/25(月) 01:27:05 ]
マジ黙れお前ら

738 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:28:46 ]
こんな感じでいいのか?

LPTSTR name = NULL, newptr;
DWORD len = 32, rlen;
do {
rlen = 0;
len *= 2;
if ( (newptr = (LPTSTR)realloc(name, len * sizeof(TCHAR))) == NULL ) break;
name = newptr;
} while ( (rlen = GetModuleFileName(NULL, name, len)) == len );
if ( rlen ) _putts(name);
free(name);

始め、GetLastErrorを使った切り捨てチェックで実装しようとして気付いたのだが、
SDK for WindowsVista 付属のドキュメントで、
GetModuleFileNameがバッファが小さくて切り捨てした時、
ERROR_INSUFFICIENT_BUFFERがセットされる、とあるけどこれ嘘だな。
いつからか誤った記述が紛れ込んだ予感。

739 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:32:22 ]
>>734が嫌味なのか真性なのか分からない俺はハントシーロムッテロなのか・・・


740 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:36:18 ]
>>738
DWORD len = MAX_PATH, rlen; の方がrealloc呼ばれる回数が減っていいかも



741 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:36:49 ]
MSDNは無謬
そんな風に思っていた時期が…

無い

742 名前:738 mailto:sage [2008/02/25(月) 02:06:26 ]
改めて見るとrealloc使う必要性全然ないな。
随時追加を実装する時のコードだ、これは。
free(name);
if ( (name = (LPTSTR)malloc(len * sizeof(TCHAR))) == NULL ) break;
これでいいや。

743 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:27:33 ]
このスレからカルトを感じる

744 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 03:15:59 ]
適当な大き目のバッファをスタックに取ってOK
それで取得できないような糞長いディレクトリを使うような池沼は無視して問題ない。

745 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 04:31:53 ]
俺も1KBくらい取って駄目なら止めるな
無駄な作業だもんw

746 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 05:00:57 ]
プログラム板の住人はいつも無意味にピリピリしてるのれす

747 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 05:06:54 ]
そもそも>>678が勘違いして関係ない糞ース書くからだろ

748 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 07:41:48 ]
そうか・・・。
バッファが足りないときは nSize がそのまま返ってきて
ERROR_INSUFFICIENT_BUFFER エラーになるだけなのか。
あんま斜め読みして横レスするもんじゃないな。

749 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 07:45:05 ]
そういう風に勝手にMaxを想定するプログラマが多いから、
東証のシステムが止まったりするんだよな。





750 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 08:04:45 ]
>>749
Microsoft自体がそうだけどな。
Path系APIがMAX_PATHを超えるパスを正しく処理できない、とか。






751 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 08:12:57 ]
それは、ANSI版使うからだね。Unicode版使えば、約32000文字まで扱えるかな?


752 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 08:50:50 ]
違うよ。Path関数はバッファ長を引数に渡さないからA/W版共にMAX_PATH固定で作ってあるんだよ。

753 名前:デフォルトの名無しさん [2008/02/25(月) 09:30:24 ]
ダイアログボックスに関する質問です。
モーダルダイアログボックスで、キャプションバー付き、システムメニュー&最小化ボタン等付き、オーバーラップスタイルで作成しています。
タイトルは開発環境のダイアログプロパティで指定して、メニューも同様です。
普通のウィンドウって左上にアイコンがでますよね?
ダイアログボックスでも普通はアイコンが表示されるんですが、メニューをダイアログボックスに指定する(追加する?)と
このアイコンが表示されなくなってしまうんですが、どうしたらいいでしょうか
メニューバーを付けないと、アイコンは表示されるんですが・・

一応リソースの中身はこういう風になっています。
IDD_DIALOG1 DIALOGEX 32, 32, 155, 81
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
CAPTION "タイトル"
MENU IDR_MENU1
FONT 9, "MS Pゴシック"

754 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:19:12 ]
指定のフォルダ内にあるファイルのファイル名を全て取得するにはどうすればできますか?
フォルダ内のファイルを全て開きたいんですが

755 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:26:52 ]
FindFirstFile
FindNextFile

756 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:28:28 ]
FindFirstFile、FindNextFileで列挙する

757 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:48:10 ]
ありがとうございます。できました

758 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:01:42 ]
ああ、PATH系ってShell系のAPIね。それならそうかも。前、エクスプローラ使って、
頑張って長いパスのファイル・フォルダ作ろうとしたが、そこらへんの壁越えれなった


759 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 15:34:45 ]
>>690見て思ったんだが、配列なら_countof使ったらいかんの?
(VC++2005以降だが2003でも定義コピペすれば使える)

760 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:43:09 ]
_countofでもARRAYSIZEでもいいけど、
C89に入れてくれればそれで統一できて良かったのに……。
C99でも遅くない。次の改訂でも遅くないから。

C++だとboost::sizeがあるけど、配列に対してはstd::size_tを返すから、
Win32 APIでは少し使いづらい。定数式が必要なときも使えないし。



761 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:45:14 ]
またboost厨か
C++にはSTLがあるという話をするなら分からんでもないが
標準ライブラリでないboost前提で平然と話を進めるあたり流石としか言えない

762 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:59:44 ]
つうかそんな小物のためにboost入れたくないな

763 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:20:15 ]
CreateWindowExでES_MULTILINEを設定してEDITコントロールを作成すると
WS_TABSTOPを記述してもtabでのコントロール間でのフォーカス遷移がそのコントロールでとまってしまいます。

ES_MULTILINEをスタイルに設定したEDITコントロールでもWS_TABSTOPが使えるようにするにはどうすれば良いですか?

764 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:39:18 ]
sizeof も size_t 返すじゃん?

765 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 05:48:03 ]
コンパイル時定数です C言語スレでどうぞ

766 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:10:14 ]
>>763
WM_GETDLGCODEの戻り値を
サブクラス化して弄ってやればいいような気がする。
タブが入力できなくなるかもしれんが、それは知らん。

767 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:55:53 ]
lpBufSizeの分領域を確保しようとしてるんですが、HttpQueryInfoでHTTP_QUERY_CONTENT_LENGTH
を指定してもlpBufに何も返ってきてくれません
やっぱりHttpOpenRequestの3個目の引数が間違ってるんでしょうか?
index.htmlや./、../など色々試してみても変らずだったんですが
www.google.co.jp/みたいに/の後に何も無い場合って何を入れればいいですか?


//ソース
hInet=InternetOpen(szClassName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(!hInet)return -1;

hConn=InternetConnect(hInet,"www.google.co.jp",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
if(!hConn){
   InternetCloseHandle(hInet);
   return -1;
}

hReq=HttpOpenRequest(hConn,"GET","/",NULL,NULL,NULL,0,NULL);
if(!hReq){
   InternetCloseHandle(hConn);
   InternetCloseHandle(hInet);
   return -1;
}

if(!HttpSendRequest(hReq,NULL,0,NULL,0)){
   InternetCloseHandle(hReq);
   InternetCloseHandle(hConn);
   InternetCloseHandle(hInet);
}

HttpQueryInfo(hReq,HTTP_QUERY_CONTENT_LENGTH,lpBufSize,&dwSize,NULL);
※lpBufSizeに何も入らない…

768 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:58:53 ]
google の / がどうかは知らないけど、content-length は必ずあるとも限らないしねぇ

769 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:50:39 ]
index.htm、またはindex.html

googleはindex.html
www.google.co.jp/index.html = www.google.co.jp/

770 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:02:39 ]
"/" 等のディレクトリへのアクセスは、普通はサーバーが解釈してくれるんじゃない?
(index.html, index.htm, default.html, index.asp, ...)



771 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:04:49 ]
質問です。
RegisterHotKeyでホットキーを使いたいと思うんですが、
NumLockを外した状態のテンキー(カーソルやらHomeやらEndやらとして動作する)
をホットキーとして利用したいんです。

ところがホットキーの仕様ではいわゆる普通のカーソルキーとテンキー部分との区別が無いので、
どっちのキーを押してもホットキーとして反応してしまいます。

テンキー部分のみをホットキーとして利用できるようなカラクリをこしらえられませんかね。
WM_KEYDOWNとかならExtendedKeyか否かで両者を区別できるんだけどな。
やっぱHookしか無いですかね。

772 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:29:15 ]
>>770
解釈ってーかリダイレクトされるな多くの場合は。

773 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:00:23 ]
>>768-770
ありがとうございます。とりあえず3番目の因数は/でいいんですね
それでも何も入らないのはヘッダに情報が無いからなのかな
調べてたらInternetQueryDataAvailableでサイズ調べれることを知ったのでこれ
を使って確保することにします

774 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:03:09 ]
突っ込んではいけない

775 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:02:33 ]
ごめんInternetQueryDataAvailableで分かるのは一度に読み込めるバイト数だったのね
とりあえずは諦めて読み込めない時は5000000確保することにしました
それでこんな風に書いてみたんですが、yahooやgoogleでは途中までしかダウンロード
されないんですが何故ですか?
ずっとブレークポイントで止めたりググたりして調べてるんだけど分からなくて発狂しそうです

とりあえずエラーチェック無しで書いてみてます

if(lpBufSize[0]=='\0')lstrcpy(lpBufSize,"5000000");
BufSize=(atol(lpBufSize))+1;
lpszBuf=(char *)GlobalAlloc(GMEM_FIXED,sizeof(char)*BufSize);
memset(lpszBuf,0x00,sizeof(char)*BufSize);
char *Buf=lpszBuf;
while(1){
    InternetReadFile(hReq,Buf,BufSize,&dwSize);
    Buf+=dwSize;
    if(dwSize == 0)break;
}

776 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:35:23 ]
戻り値とGetLastErrorの確認

777 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:36:00 ]
msdn2.microsoft.com/en-us/library/aa385103.aspx

>To ensure all data is retrieved, an application must continue
>to call the InternetReadFile function until the function
>returns TRUE and the lpdwNumberOfBytesRead parameter equals zero.

778 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:33:00 ]
>>776
ありがとう。ループ1回目はエラー無しで2回目からエラーコードERROR_INVALID_PARAMETERがでて
調べると「パラメータが間違ってる」らしいけど何が間違ってるのかわからない…
現在のソースは>>767>>775をくっつけてる状態です
>>777
完全にダウンロードするには、dwSizeが0かつ関数がTRUEを返すまでループさせないと
いけないってこと?
でもそれだと永遠ループしてしまう

779 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:35:22 ]
実際にはない部分の領域も書けるといっちゃダメって話じゃないの。
要するにBufSizeもちゃんと減らせと。

780 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:41:32 ]
>>779
ありがとう。そういうことっぽかったです
試しにInternetReadFileの3つ目の引数を1にしてみたらいけました。
ただこれだと効率悪そうなのでまた今度ちゃんと考えて計算してみます
インターネットに繋げるのに6時間以上かかってしまったけど上手くいってよかった



781 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:53:13 ]
>>774
「因数」のことか?代わりに突っ込んどくか。

引数(ひきすう)が正しい。

782 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:20:34 ]
if(lpBufSize[0]=='\0')lstrcpy(lpBufSize,"5000000");
BufSize=(atol(lpBufSize))+1;

とか

lpszBuf=(char *)GlobalAlloc(GMEM_FIXED,sizeof(char)*BufSize);
memset(lpszBuf,0x00,sizeof(char)*BufSize);

とか突っ込みどころ満載だな

783 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:36:56 ]
いんすうwwwwwwwwwwwwwwwwww昔の俺だwwwwwwwwwwwww

784 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:50:34 ]
>>782
どう直すと良くなる?

785 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:52:30 ]
今時クリップボード以外でGlobalAlloc使う意味あんの?

786 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:52:31 ]
GlobalAlloc使う理由がわからん
HeapAllocのがよろしいと思うんだけどね 0梅とかシングルスレッド用オプションとか多機能だし

787 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:58:16 ]
スレ的にはnew使うのは無しか

788 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:01:08 ]
lpBufSizeがどこから来ているかわからないが、
初めから整数型にしておけよ。特に関数の引数なら尚更。

789 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:05:12 ]
音訓交じりな"ひきすう"より"いんすう"と読む方が国語的にはセンスがある筈なんだけどね

790 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:06:54 ]
それだと因数と同じ発音だから「ひきすう」と読むと説明される。



791 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:07:03 ]
正直HeapAllocも使わない
malloc/callocやnew使ったほうがデバッグビルドでメモリリーク検出できるし

792 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:08:47 ]
引数が「ひきすう」なら因数は「よりすう」と読むべき。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<212KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef