使用MFC和早绑定创建了COM对象,我认为访问“COM接口成员函数”必定经过“虚拟表接口”来访问的,我自定义的COM接口IFeifei如下:
import "unknwn.idl";
[
object,
uuid(C177116E-9AAA-11D3-805D-000000000000),
pointer_default(unique)
]
interface IFeifei : IUnknown
{
HRESULT Method1([in] long lArg1, [out] long *plArg2);
HRESULT Method2([in] long lArg, [in] unsigned long ulArg);
};Method1和Method1方法只是各实现了简单的对话框,COM组件客户端调用该接口也正常,但是运行时,我发现接口IFeifei的VTBL表中只有IUnknown的那三个函数,却没找到Method1 和 Method2, 为什么???我认为VTBL表中应该有五个函数才对啊,为什么会这样?
import "unknwn.idl";
[
object,
uuid(C177116E-9AAA-11D3-805D-000000000000),
pointer_default(unique)
]
interface IFeifei : IUnknown
{
HRESULT Method1([in] long lArg1, [out] long *plArg2);
HRESULT Method2([in] long lArg, [in] unsigned long ulArg);
};Method1和Method1方法只是各实现了简单的对话框,COM组件客户端调用该接口也正常,但是运行时,我发现接口IFeifei的VTBL表中只有IUnknown的那三个函数,却没找到Method1 和 Method2, 为什么???我认为VTBL表中应该有五个函数才对啊,为什么会这样?
HRESULT hr=::CoCreateInstance(CLSID_IWzdSrv,NULL,CLSCTX_INPROC_SERVER,IID_IFeifei,(LPVOID*) &iFeifei);
if (FAILED(hr))
{
_com_error err(hr);
AfxMessageBox(err.ErrorMessage());
return;
}
long lArg;
iFeifei->Method1(1234,&lArg); //此处设置断点,查看接口iFeifei指针的VTBL
long lArg2=12345678L;
unsigned long ulArg=4026531840L;
iFeifei->Method2(lArg2, ulArg);
iFeifei->Release();结果,只看到IUnknown的那三个函数,为什么?为什么看不到Method1和Method2?不是说,直接可以访问制定接口(早绑定)的成员函数?
>>Method1 和 Method2 不是虚礼的,不应该出现在 virtual table 中。
//初学com,不能确定回答是否正确。
fucptr=iWzd->Method2; //出错,类型无法转换