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); |
ちなみにヘルパー関数を使わない場合こうなります。
Comments