描述:
使用代码:
CoInitialize(NULL);
IComponentInterface * pInterface = NULL;
hr = CoCreateInstance(CLSID_MyComponent, NULL, CLSCTX_ALL, IID_IComponentInterface, (PVOID*)(&pInterface));
就是这一句返回REGDB_E_IIDNOTREG.
IComponentInterface的实现代码(部分关键代码)。
IClassFactory::CreateInstance(IUnknown pUnknown, REGIID riid, PVOID * ppv)
{
if (pUnknown){
对象不支持聚合。
}
CComponentInterface * pInterface = new CComponentInterface;
if (pInterface){
return pInterface->QueryInterface(riid, ppv);
}
else{
无法建立对象实例
}
}
CComponentInterface : public IComponentInterface;
CComponentInterface::QueryInterface(REFIID riid, PVOID* ppv)
{
HRESULT hr = E_FAIL; // 我改为其他的错误也不行
if (IsEuqalIID(riid, IID_IComponentInterface)){
*ppv = (IComponentInterface *)(this);
hr = S_OK;
}
else if (IsEuqalIID(riid, IID_IUnknown)){
*ppv = (IUnknown *)(this);
hr = S_OK;
}
return hr;
}
我可以得到IUnknown接口,但调用IUnknown->QueryInterface(IID_IComponentInterface, &pInterafce)时也出错。
我是在COM组件中调用上面的代码的。
请各位大侠帮帮忙。谢谢。
解决方案1:
我前几天也写了个DLL,结果也是这样的错误,我查了一天,原来是在注册的时候把CLSID写成了CLISID,哈哈。
你看看有没有相同的错误!
请看一下IID_IComponentInterface这个变量的定义,检查一下它的值是否和在.IDL文件中的一样,可能你某次不小心修改了.IDL文件中的相关部分
解决方案3: hr = CoCreateInstance(CLSID_ComponentInterface, NULL, CLSCTX_ALL, IID_IComponentInterface, (PVOID*)(&pInterface));
改成这样看看
从字面上看是没有注册IID
你查一查注册表,看看clsid键下有没有CLSID_MyComponent
您可能想查找下面的文章:
- CoCreateInstance和CoCreateInstanceEx的区别??
- 抓狂!看了几天了,CoCreateInstance总是出错!!!!救命啊!
- CoCreateInstance的内部实现问题??
- CoCreateInstanceEx问题
- CoCreateInstance调用成功,CoGetClassObject调用失败,为什么?
- 调用CoCreateInstance函数报“errorC2065:IID_IShellLink:未声明的标识符”是怎么回事?
- 为什麽无法调用CoCreateInstanceEx?
- 配置为COM+组件后,CoCreateInstance失败!
- 一个非常简单的问题,关于CoCreateInstanceEx?
- CoCreateInstance返回的错误码为800401F0是代表什么错误?