【最大10000ポイント】当たる!!質問投稿キャンペーン!

MFC-dllを作成してVBで使用しようと思っています。
DLLの中ではWebサーバーに接続してデータを取得して
VBで使う感じです。
DLLの中でダイアログボックスを一個作ってその中で実際のサーバーとの通信を行います。次のコードはそのDLL中のダイアログボックスの中でボタンを押したとき実行される関数です。
動きとしてはサーバーに接続し、データを正しく取得できますが、問題はこのDLLを使っているVBプログラムが終了してもWindows タスクマネージャーを見ると終了されてない状態です(デスクトップ画面上では終了されています)。しばらくしたら『応答なし』になって結局2~3分たったら自動に消滅されるのですが何だか感じ悪いです。コードの中に何か問題があるかどうか教えてください。

Void CTest::GetA (){
CHAR buffer[2048];
DWORD dwRead;
char Header[]="Content-Type: application/x-www-form-urlencoded\n";
char Data[]="name=JohnDoe";
HINTERNET hINet=InternetOpen("V1.0",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
HINTERNET hCon=InternetConnect(hINet,"localhost",8080,"","", INTERNET_SERVICE_HTTP,0,0);
HINTERNET hData = HttpOpenRequest(hConnection,"POST","/test001.asp",NULL,NULL,NULL,INTERNET_FLAG_KEEP_CONNECTION,0);
HttpSendRequest( hData, Header, strlen(Header),Data,strlen(Data));
while( InternetReadFile( hData, buffer, 255, &dwRead ) ) {
if ( dwRead == 0 ) break;
buffer[dwRead] = 0;
m_strContents += buffer;
}
InternetCloseHandle(hCon);
InternetCloseHandle(hINet);
InternetCloseHandle(hData);
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>ちなみに


>HttpSendRequest( hData, strHeaders, strlen(strHeaders), strFormData, strlen(strFormData));

>コメットアウトすると正常に終了し、『Windowsタスクマネージャ』にも何も残りません。

あのう、このソースってデータを取得するんですか?
アップするんですか?
HttpOpenRequestでPOSTになってますけど。

参考URL:http://www.athomejp.com/goldfish/api/wininetread …

この回答への補足

データをPOSTして、それをもとにウェブページからまたデータを取得しています。コメントアウトしてみたのでどこが問題になっているのかチェックするためです。
なんだか原因を探すのが結構難しいような気がしますけど、皆さんよろしくお願いします。

補足日時:2004/01/09 13:06
    • good
    • 0
この回答へのお礼

ついに原因がわかりました。原因は
(1)『MFCの共有DLL使用』でコンパイルすると問題なくVBアプリの終了と同時にメモリから消滅しましたが、
(2)『MFCのスタティックライブラリを使用した標準DLL』でコンパイルすると上の問題が生じました。
多分MFCのバッグかもしれません。こういうときはどうすれば良いでしょうか。今回の仕様上(2)を使わないといけませんが。。。。(大ピンチ)です。
皆さん助けてください。

お礼日時:2004/01/09 21:33

>(2)『MFCのスタティックライブラリを使用した標準DLL』でコンパイルすると上の問題が生じました。



ライブラリは正しく”マルチスレッド”を選択してますか?

http://www.kumei.ne.jp/c_lang/setvc.htm

この回答への補足

ご回答有難うございます。

ライブラリは正しく”マルチスレッド”になっていました。

実は別のパソコンでやってみたら大丈夫でした。
僕のパソコンは
Pentium2Celeon450MHz
Windows2000server
なんですが、
Pentium41.4GHz
Windows2000Pro
で同じ作業をしてみたら二つのDLLライブラリリンク方法(Static、dynamic)で正常にメモリからなくなりました。
どうやらパソコンが遅くて生じたらしいですが、
メモリからなくなるのに2分かかるなんて、。。。。?

皆さん回答は有難うございました。

補足日時:2004/01/11 16:11
    • good
    • 0

InternetCloseHandle()の戻り値は?


閉じる順番は、WinInetに限らず開いた順番の逆が基本です。

この回答への補足

ご回答有難うございます。

クロスする順番をしたのようにして、戻り値を調べた見たところ
InternetCloseHandle(hData);
InternetCloseHandle(hConnection);
InternetCloseHandle(hINet);
三つとも『1』が返ってきました。

ちなみに
HttpSendRequest( hData, strHeaders, strlen(strHeaders), strFormData, strlen(strFormData));
をコメットアウトすると正常に終了し、『Windowsタスクマネージャ』にも何も残りません。
これが何か手がかりになるかもしれませんので書いておきます。何だか難しいですね。

補足日時:2004/01/08 20:13
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング