curl — c ++ Зависание программы при вызове функции из dll

Существует простая программа для выполнения 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;
}

Exe-файл проекта для запуска dll http://rghost.ru/46766786 (для vc2010) просто нажмите кнопку «скачать» проекта dll http://rghost.ru/46766821 (для vc2010)

Как я могу заставить программу не зависать?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]