OLE/COM对象查看器报告STG_E_FILENOTFOUND

vic*_*ico 2 c++ com visual-studio-2010

我使用ATL创建了简单的COM DLL,之后添加了"ATL Simple Object".为了确保服务器正在注册,我已经放置了messagebox:

STDAPI DllRegisterServer(void)
{
     MessageBoxA ( NULL, "Hello World!", "Test", MB_OK );
    HRESULT hr = _AtlModule.DllRegisterServer();
        return hr;
}
Run Code Online (Sandbox Code Playgroud)

注册很好.我决定看看这个对象看起来是如何使用作为SDK一部分的OLE-COM对象查看器.查看者报告错误:

 "LoadTypelib'(c:\pr\ILight.dll) failed. 
 <No system message defined> STG_E_FILENOTFOUND ($800300002)
Run Code Online (Sandbox Code Playgroud)

这是否意味着我的COM dll已损坏?如何让VIewer显示我的dll信息?

PS项目RC文件contians:

"注册表"

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'
    }
}
    }
Run Code Online (Sandbox Code Playgroud)

字符串表

String table
ID=IDS_PROJNAME Value=100 Caption ILight
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

小智 7

在已经收到了同样的错误(STG_E_FILENOTFOUND),看到乔Willcoxson的评论约64位和32位,我能够找到一个解决方案.

如果你使用OleView.exe,OLE/COM对象查看器,它实际上有两个版本:32位和64位.确保使用正确版本的OleView启动.SDK的基本"BIN"文件夹中的版本将是32位版本.在"64"的文件夹具有应用程序,这是不符合旧的二进制文件及其类型库(在32位世界制造)完全兼容的64位版本.

在另一方面,如果你的新的DLL正在被编译为64位,那么它极有可能32位OLEVIEW将无法正确读取数据,无论是.