接口獲得和方法被稱爲:如何在C++中查找指向接口的指針地址?
IFileOpenDialog *pFileOpen;
CoCreateInstance(__uuidof(FileOpenDialog), NULL, CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pFileOpen));
pFileOpen->Show(NULL);
在組件,它是:
mov eax,pFileOpen
mov ecx,dword ptr [eax]
mov edx,pFileOpen
push edx
mov eax,dword ptr [ecx+ offset_Show]
call eax
也就是說ECX是指針VMT,[ECX + offset_Show]是顯示方法。 如何獲得offset_Show,理想情況下儘可能高。 pFileOpen->顯示爲指針不可編譯。
使用微軟的offsetof()宏。 https://msdn.microsoft.com/en-us/library/dz4y9b9a.aspx –
你將不得不#包括shobjidl.h之前#定義CINTERFACE,那麼你就可以訪問到VTBL聲明和offsetof(IFileDialogVtbl,展)將工作。但是這對程序的其他部分有很大的破壞性。谷歌的「C++獲得虛擬函數在vtbl中的偏移量」。 –