我正在學習COM的基礎知識,所以我嘗試在VS2010 C++ Windows 7中編寫簡單的COM組件。 我爲組件創建了dll,使用以下REG-file註冊它:在我自己的COM組件上沒有註冊的類(0x80040154)
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我出口(去年兩個stub)
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)。源代碼我從教程中獲得,所以我不明白什麼是錯的。
爲什麼不使用regsvr32.exe來註冊你的組件? –
機會很高,它是Win32/x64的問題,但是因爲你似乎從一開始就構建它,所以有許多方法可以打破它。沒有證據表明您甚至有CLSID的班級工廠。發佈更多的代碼,包括服務器和客戶端。如果你使用的是64位系統,那麼對於初學者來說,在64位域中做所有事情都是有意義的。 –