CoCreateInstanceで、引数が4つしかない関数

CoCreateInstance(CLSID_WICHeifEncoder, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pEncoder));

例えば、このプログラム、

HRESULT CoCreateInstance( REFCLSID rclsid, IUnknown* punkAggOuter, DWORD dwCLSCTX, REFIID riid, LPVOID* ppvObj);

定義では5つの引数があるのに4つしかありません。

      lea         eax,[esp+8]
      push        eax
      push        offset __GUID_00000103_a8f2_4877_ba0a_fd2b6645fb94
      push        1
      push        ebx
      push        offset _CLSID_WICDdsEncoder
      call        dword ptr [__imp__CoCreateInstance@20 (773160h)]

でも、逆アセンブルしたらちゃんと5つになっています

実はIID_PPV_ARGS(ppType) は
__uuidof(**(ppType)), IID_PPV_ARGS_Helper(ppType)
と定義されていて、
第4パラメータと第5パラメータに分解してくれるヘルパー関数なんですね。

CoCreateInstance(CLSID_WICHeifEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWICBitmapEncoder,(LPVOID*)&pEncoder);

ちなみにヘルパー関数を使わない場合こうなります。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です