描述:
一个COM 组件,声明为pObject,CoCreateInstance以后,该对象创建成功。对象有一方法,为创建其他对象用的CreateObject(IDispatch** pVal),所创建的对象为
SubObject* pSubObject=NULL,利用pObject->CreateObject((IDispatch**)&pSubObject),完成后调用pSubObject的方法出现“calling a function declared with on calling convention with a funtion pointer declared with a different calling convention”.
完成代码如下:
IServer* pServer=NULL;
TEST_FAIL(CoCreateInstance(CLSID_Server, 0, CLSCTX_SERVER, IID_IServer, (void**) &pServer));
SubServer* pSubServer=NULL;
TEST_FAIL(pServer->get_CreateObject((IDispatch**)&pSubServer));
//put_ToName(BSTR pVal);
TEST_FAIL(pSubServer->put_ToName(_bstr_t("tt")));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里出错
请问,出现这个错误是哪里的问题?
解决方案1:
ToName是一个属性吧?
直接赋值就可以了。
CreateObject返回的是对象的IDispatch接口,不要以为接口就是对象指针!
正确的方法是使用IUnknown::QueryInterface查询需要的接口
Client 通过 interface和server打交道。
楼主pServer 是接口
pServer->get_CreateObject((IDispatch**)&pSubServer)) pSubServer值也是接口,但类型是SubServer*,十分不解.