2011-01-12 24 views
2

これは本当にわかりません。boost :: asio :: io_serviceが例外をスローする

MSVCにBoost 1.45.0のAsioを使用しようとしている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のは、この時点で機能することができません現在、ここでは利用できません

は、(エラーコード10091、WSASYSNOTREADY)MSDNはそれについてこう言われる、

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

しかし、これは私には当てはまりません(または私は思う)。ここで

は私のコマンドラインです:

/O2/GL/D "_WIN32_WINNT =て0x0501"/D "_WINDLL"/FD/EHsc/MD /グレイ/ FO "リリース\"/Fdを」リリース\ vc90.pdb "/ W3/WX/nologo/c/TP/errorReport:プロンプト

何が間違っているのか分かっている人は、私を助けてください!ありがとう。

答えて

1

マイクロソフトではnot to call WSAStartup from DllMainを推奨しています。他の場所でIOスレッドを作成することをお勧めします。

WSAStartup関数は、通常、プロトコル固有のヘルパーDLLが読み込まれるようにします。結果として、WSAStartup関数は、アプリケーションDLLのDllMain関数から呼び出されるべきではありません。

+0

他にスレッドは作成できますか。それが正しいエントリーポイントです。 – DSB

+0

DllMainにスレッドを作成する際に何が問題になっていますか? IOと他のスレッドとの違いは何ですか? –

+0

さて、io_serviceをこの特定のDLLの外に置くことで、最終的に修正しました。あなたが提案したものが本当に問題だったかどうかに関わらず、それは私を解決に導いてくれました。ありがとうございました。 – DSB

関連する問題