トルネード

毛利のメモ書き

Delphi WinRT CoでなくRoInitialize()

DelphiWinRTを使う場合System.Win.WinRTをusesに含めることでinitialization時にRoInitialize()を実行します。この場合、RoInitialize(RO_INIT_MULTITHREADED)でイニシャライズされます。この処理はInitProcで処理されます。

通天閣

仕組みは、Winapi.ActiveXのCoInitialize()と同じです。ActiveXの場合System.Win.ComObjのイニシャライズにCoInitialize(nil)が入っていますね。

RoUninitialize()に関してもSystem.Win.WinRTのfinalizationに入っています。

サブロックなんば

RoInitialize(RO_INIT_MULTITHREADED)はInitProcに入っているので、当然ですがコンソールアプリなどを作った場合InitProcに設定した関数は実行されません。従ってコンソールアプリの場合、RoInitialize()とRoUninitialize()をbegin〜end.内に書くことが必要です。この場合RoInitialize()はRO_INIT_MULTITHREADEDでなくともRO_INIT_SINGLETHREADEDを指定することもできます。RoInitialize()が実行されていない場合、EWinRTExceptionになります。