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);
}
お礼
ついに原因がわかりました。原因は (1)『MFCの共有DLL使用』でコンパイルすると問題なくVBアプリの終了と同時にメモリから消滅しましたが、 (2)『MFCのスタティックライブラリを使用した標準DLL』でコンパイルすると上の問題が生じました。 多分MFCのバッグかもしれません。こういうときはどうすれば良いでしょうか。今回の仕様上(2)を使わないといけませんが。。。。(大ピンチ)です。 皆さん助けてください。
補足
データをPOSTして、それをもとにウェブページからまたデータを取得しています。コメントアウトしてみたのでどこが問題になっているのかチェックするためです。 なんだか原因を探すのが結構難しいような気がしますけど、皆さんよろしくお願いします。