ちゃんと CoInitialize してるのに 0x800401f0 エラーになる件
0x800401F0 というのは CO_E_NOTINITIALIZED
CoInitialize has not been called (CoInitialize が呼ばれてないよ!)
っていうエラーなんですが、ちゃんとプロセス起動時に呼び出してるのじゃが・・。
VOID WINAPI ServiceMain(DWORD dwArgc, LPSTR *lpszArgv) { WSADATA wsaData; WSAStartup(MAKEWORD(2, 0), &wsaData); CoInitialize(); wServiceMain(dwArgc,lpszArgv); CoUninitialize(); WSACleanup(); } |
C++ - C++でのCoInitialize()とCoUninitialize()について|teratail
勘違いされている方もいらっしゃいますが、CoInitialize関数はスレッド毎に呼ぶ必要があります。したがって、プロセス開始時にCoInitializeを呼び出して終了時にCoUninitializeを呼び出すというコードを書いていると、マルチスレッドで失敗します |
今更なんだが知らなかった (((・ω・)))
MSDNには「Initializes the COM library for use by the calling thread」と明記されてるし、ちゃんとCOMサーバ、クライアントの仕組みから調べていくとスレッド単位で必要なことも説明されているけど、多々あるサンプルのほとんどはシングルスレッドなので、プロセスで1回と勘違いしている人が多いんだろうね。