http 要求を実行して応答を受け取る簡単なプログラムがあります。プログラムは期待どおりに動作します。
#include <stdio.h>
#include <curl/curl.h>
#pragma comment(lib,"curllib.lib")
int main(int argc, char *argv[])
{
CURL *curl_handle;
CURLcode res;
curl_handle = curl_easy_init();
if(curl_handle)
{
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.google.com");
res = curl_easy_perform(curl_handle);
curl_easy_cleanup(curl_handle);
}
getchar();
return 0;
}
プログラムを開始すると、コンソールに Google のメイン ページのコードが表示されます。
プログラムをdllに再構築しました。
#include <stdio.h>
#include <curl/curl.h>
#pragma comment(lib,"curllib.lib")
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
CURL *curl_handle;
CURLcode res;
curl_handle = curl_easy_init();
if(curl_handle)
{
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.google.com");
printf("point 1");
res = curl_easy_perform(curl_handle); //Program hang
printf("point 2");
curl_easy_cleanup(curl_handle);
}
getchar();
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
画面に「ポイント 1」が表示された後、プログラムが永久にハングします。
次のコードを使用してライブラリをロードする場合:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
typedef unsigned __int64 ulong64;
typedef int (*ph_dct_imagehash)(const char* file,ulong64 &hash);
int _tmain(int argc, _TCHAR* argv[])
{
ph_dct_imagehash _ph_dct_imagehash;
HINSTANCE hInstLibrary = LoadLibrary(L"dlltest.dll");
if (hInstLibrary)
{
std::cout << "Ok!" << std::endl;
FreeLibrary(hInstLibrary);
}
else
{
std::cout << "DLL Failed To Load!" << std::endl;
std::cout << GetLastError() << std::endl;
}
std::cin.get();
return 0;
}
dll http://rghost.ru/46766786 (vc2010 の場合)を実行するプロジェクト exe ファイルは、「скачать」ボタンを押すだけです プロジェクト dll http://rghost.ru/46766821 (vc2010 の場合)
プログラムがハングしないようにするにはどうすればよいですか?