我有一个存在 COM 问题的大型复杂程序。
我正在尝试编写一个更小的SSCCE程序来减少问题。
但是,无论我尝试什么,CoCreateInstance
我的 SSCCE 中的
hr 0x80040154 (Class Not Registered) (For CoCreateInstance)
0x800706B5: The interface is unknown. (for ICalendarPtr constructor)
我正在使用更大程序中的相同 GUID 和其他参数。
(结果我没有使用相同的指南。只是类似的)
我链接到相同的库,并且有相同的 DLL 可用(在本地和在 Program Files 中正确注册)。
我不是注册表专家,但通过注册表,我发现接口和类 GUID 看起来已正确注册,TypeLib 键引用了一个存在且可访问的 DLL。
你能想到一些我可能遗漏的东西会导致一个程序成功创建一个 COM 对象,但另一个说这个类没有注册?
代码:
_COM_SMARTPTR_TYPEDEF(ICalendar, __uuidof(ICalendar));
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
CLSID classID = __uuidof(ICalendar);
REFIID iid = __uuidof(IUnknown);
LPVOID pRet;
HRESULT hr = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, iid, &pRet);
// Result: 0x80040154 Class not registered
GUID guid = __uuidof(ICalendar);
ICalendarPtr pDtTm(guid);
// Result: First-chance exception at 0x773dc41f in COMTest.exe: 0x800706B5: The interface is unknown.
return 0;
}