我正在学习 COM 的基础知识,所以我尝试在 VS2010 C++ Windows 7 中编写简单的 COM 组件。我为组件创建了 dll,并使用以下 REG 文件注册了它:
REGEDIT
HKEY_CLASSES_ROOT\Math.Component.1 = Chapter 6 Math Component
HKEY_CLASSES_ROOT\Math.Component.1\CurVer = Math.Component.1
HKEY_CLASSES_ROOT\Math.Component.1\CLSID = {A888F560-58E4-11d0-A68A-0000837E3100}
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100} = Chapter 6 Math Component
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\ProgID = Math.Component.1
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\VersionIndependentProgID = Math.Component
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\InprocServer32 = D:\Proga\COM\Debug\server.dll
HKEY_CLASSES_ROOT\CLSID\{A888F560-58E4-11d0-A68A-0000837E3100}\NotInsertable
在我导出的 dll 中(最后两个存根)
DllGetClassObject
DllCanUnloadNow
DllRegisterServer
DllUnregisterServer
在我的 COM 客户端CLSIDFromProgID( szWideProgID, &clsid );
按预期工作,返回{A888F560-58E4-11d0-A68A-0000837E3100}
.
但是当我尝试访问 IClassFactory REGDB_E_CLASSNOTREG 时,CoGetClassObject(clsid, CLSCTX_INPROC, NULL, IID_IClassFactory, (void **)&pCF)
我得到 (0x80040154) 错误。
为 Win32 目标平台编译的服务器和客户端(虽然我也尝试过 x64)。我从教程中获得的源代码,所以我不明白出了什么问题。