CoInitializeで、COMの初期化を行う。
CoInitialize function (objbase.h) - Win32 apps | Microsoft Docs
まずは、
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int _tmain(int argc, TCHAR *argv[]){
HRESULT hr = CoInitialize(NULL);
if (hr == S_OK){
_tprintf(_T("CoInitialize success!\n"));
}
CoUninitialize();
return 0;
}
こう書いて、実行すると、
CoInitialize success!
続行するには何かキーを押してください . . .
こうなる。
CoInitializeによる初期化が成功すると、S_OKが返ってくる。
次に、
#include <windows.h>
#include <tchar.h>
int _tmain(int argc, TCHAR *argv[]){
HRESULT hr = CoInitialize(NULL);
if (hr == S_OK){
_tprintf(_T("CoInitialize success!\n"));
}
HRESULT hr2 = CoInitialize(NULL);
if (hr2 == S_FALSE){
_tprintf(_T("Already initialized!\n"));
}
CoUninitialize();
return 0;
}
2回呼び出すと、
CoInitialize success!
Already initialized!
続行するには何かキーを押してください . . .
S_FALSEが返ってくる。
これは失敗というより、すでに初期化されてるという意味。
最後に、
メインスレッドでCoInitialize初期化した後で、ワーカースレッドでCoInitialize初期化。
CoInitialize success!
Already initialized!
Thread Begin
ThreadProc: CoInitialize success!
Thread End
dwExitCode = 0
続行するには何かキーを押してください . . .
プログラムの最初で初期化というより、スレッドごとに初期化できるということ。
Sample/com/CoInitialize/CoInitialize/src/CoInitialize at master · bg1bgst333/Sample · GitHub