2

さて、私はこれを真剣に理解することはできません。

Asio(Boost 1.45.0以降)を使用しようとしているMSVCのDLLプロジェクトがありますが、io_serviceを作成するたびに、例外がスローされます。これが私がテスト目的で行っていることです:

void run()
{
    boost::this_thread::sleep(boost::posix_time::seconds(5));
    try
    {
        boost::asio::io_service io_service;
    }
    catch (std::exception & e)
    {
        MessageBox(NULL, e.what(), "Exception", MB_OK);
    }
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        boost::thread thread(run);
    }
    return TRUE;
}

メッセージボックスには次のように表示されます。

winsock:WSAStartupは、ネットワークサービスを提供するために使用する基盤となるシステムが現在利用できないため、現時点では機能できません。

これはMSDNがそれについて言っていることです(エラーコード10091、WSASYSNOTREADY):

ネットワークサブシステムは利用できません。このエラーは、ネットワークサービスを提供するために使用する基盤となるシステムが現在利用できないためにWindows Sockets実装が機能できない場合に、WSAStartupによって返されます。ユーザーは次のことを確認する必要があります。適切なWindowsSocketsDLLファイルが現在のパスにあること。複数のWindowsSockets実装を同時に使用しようとしていないこと。システムに複数のWinsockDLLがある場合は、パスの最初のDLLが現在ロードされているネットワークサブシステムに適していることを確認してください。必要なすべてのコンポーネントが現在正しくインストールおよび構成されていることを確認するためのWindowsSockets実装ドキュメント。

しかし、これは私には当てはまらないようです(またはそう思います)。

これが私のコマンドラインです:

/ O2 / GL / D "_WIN32_WINNT = 0x0501" / D "_WINDLL" / FD / EHsc / MD / Gy / Fo "Release \" / Fd "Release \ vc90.pdb" / W3 / WX / nologo / c / TP / errorReport:prompt

何が悪いのか誰かが知っているなら、私を助けてください!ありがとう。

4

1 に答える 1

1

Microsoftは、から電話をかけないことをお勧めますWSAStartupDllMain。そのため、他の場所にIOスレッドを作成するのが最善の策です。

WSAStartup関数は通常、プロトコル固有のヘルパーDLLがロードされるようにします。したがって、WSAStartup関数は、アプリケーションDLLのDllMain関数から呼び出さないでください。

于 2011-01-12T12:22:05.040 に答える