我已經使用ATL創建了簡單的COM DLL,並在其後添加了「ATL簡單對象」。爲了確保服務器正在註冊我已經放置了消息框:OLE/COM對象查看器報告STG_E_FILENOTFOUND
STDAPI DllRegisterServer(void)
{
MessageBoxA (NULL, "Hello World!", "Test", MB_OK);
HRESULT hr = _AtlModule.DllRegisterServer();
return hr;
}
註冊沒有問題。我決定看看這個對象是如何用SDK中的OLE-COM Object Viewer查看的。查看器報告錯誤:
"LoadTypelib'(c:\pr\ILight.dll) failed.
<No system message defined> STG_E_FILENOTFOUND ($800300002)
這是否意味着我的COM DLL損壞?如何讓VIewer顯示我的dll信息?
P.S. 項目RC文件,則爲:
「註冊表」
IDR_ILIGHT
HKCR{}
IDR_LIGHT
HKCR
{
AboutiLight.1 = s 'Light Class'
{
CLSID = s '{DBC53EA8-A51E-4374-B104-06A834273B0C}'
}
AboutiLight = s 'Light Class'
{
CurVer = s 'AboutiLight.1'
}
NoRemove CLSID
{
ForceRemove {DBC53EA8-A51E-4374-B104-06A834273B0C} = s 'Light Class'
{
ProgID = s 'AboutiLight.1'
VersionIndependentProgID = s 'AboutiLight'
ForceRemove Programmable
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
TypeLib = s '{1D9F859D-10FF-4827-A341-4A8B8E318A61}'
Version = s '1.0'
}
}
}
字符串表
String table
ID=IDS_PROJNAME Value=100 Caption ILight
版本
VS_VERSION_INFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEMASK 0x3fL
FILEFLAGS 0x0L
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT2_UNKNOWN
註冊服務器並查看嵌入在DLL中的類型庫是兩個完全不同的事情。爲什麼沒有嵌入類型lib完全不清楚,請檢查項目的.rc文件。確保你的界面實際上有方法。 – 2012-08-02 12:41:24
我不知道.rc文件應該是什麼。但它包含在問題描述末尾描述的3個文件夾 – vico 2012-08-02 14:16:13
資源腳本引用的任何內容都不表明該DLL具有類型庫。但是它可能仍然沒問題,因爲它通常是通過'TEXTINCLUDE'部分或'.RC'文件引用的,而您並未引用該文件。 – 2012-12-14 22:21:52