1

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 の場合)

プログラムがハングしないようにするにはどうすればよいですか?

4

0 に答える 0