关于COM组件QueryInterface返回E_NOINTERFACE的问题
在程序中,C++工程调用了一个C#写的COM组件,但是在CreateInstance创建一个对象的时候总是没有创建成功。
错误是在CreateInstance中,首先调用了CoCreateInstance是成功的,但是调用QueryInterface的时候返回E_NOINTERFACE,而最终把对象接口返回为空。
HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
{
HRESULT hr;
_Release();
if (dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
IUnknown* pIUnknown;
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));
if (SUCCEEDED(hr)) {
hr = OleRun(pIUnknown);
if (SUCCEEDED(hr)) {
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface)); //此次返回为
E_NOINTERFACE
}
pIUnknown->Release();
}
}
else {
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast<void**>(&m_pInterface));
}
if (FAILED(hr)) {
// just in case refcount = 0 and dtor gets called
m_pInterface = NULL;
}
return hr;
}
另外,查看了一下注册表,里面的相应的接口都有的,但是还是返回E_NOINTERFACE,请大牛帮忙分析一下,谢谢!