D言語 Advent Calendar 2025 5日目の記事です。
前回の記事で、IFileOpenDialogのCOMインタフェースを使う準備をしました。
COMの初期化
COMを使うには、何はともあれ初期化しないと始まりません。
CoInitialize 関数 (objbase.h) - Win32 apps | Microsoft Learn
CoInitializeEx 関数 (combaseapi.h) - Win32 apps | Microsoft Learn
COMを初期化する関数といえば、CoInitialize関数ですが、 CoInitializeEx関数を使えと書いてあるので、そうします。
combaseapi.hとObjbase.hで宣言されていると書いてあるので調べると、 D言語のcore.sys.windows.objbaseが見つかったので、これをインポートします。
CoInitializeExの第2引数は、今回はコンソールアプリなので、 COINIT.COINIT_MULTITHREADEDにしておきます。
COMの解放
次に、COMの解放処理といえばCoUninitialize関数です。
CoUninitialize 関数 (combaseapi.h) - Win32 apps | Microsoft Learn
とりあえずここまででCOMの初期化と解放の定型文が書けて、コンパイルできるようになります。
import core.sys.windows.windef; import core.sys.windows.com; import core.sys.windows.objbase; void main() { HRESULT hr; hr = CoInitializeEx(null, COINIT.COINIT_MULTITHREADED); if (FAILED(hr)) return; scope(exit) CoUninitialize(); // ここにCOMを使うコードを書いていく }