我有一个COM类CMyCOMServer
,在一个应用程序中实现了IMyInterface
,并且都具有正确的GUID。如果请求IUnknown或IMyInterface,则CMyCOMServer :: QueryInterface
将返回S_OK(并将自身转换为正确的类型),否则它将返回E_NOINTERFACE。
在同一台PC上的另一个应用程序中,我调用:
HRESULT hr = ::CoCreateInstance(__uuidof(CMyCOMServer), 0, CLSCTX_SERVER,
__uuidof(IMyInterface ),(void **)&pInterface);
它返回 E_NOINTERFACE。因此,我认为我做错了什么,并在
CMyCOMServer::QueryInterface
上添加了一个断点。我发现当调用 CoCreateInstance
时,QueryInterface
会多次触发不同的接口请求:
- 首先,请求 IUnknown - 没有问题
- 然后,请求几个诸如 IMarshall 等接口...这些接口不受支持,因此返回 E_NOINTERFACE
- 最后,请求 IMyInterface。我验证 QueryInterface 返回 S_OK 并将
(IMyInterface *)this
设置为接口指针,正如预期的那样
编辑:我的客户端应用程序在启动时调用 CoInitialize(NULL),但这没有任何影响。