我正在使用第三方dll开发我的应用程序,它是一个COM对象。我试图使我的应用程序隔离,使用COM免注册。但我无法找到很好的示例/步骤/教程来了解如何做到这一点。请告诉我我所做的是正确还是错误。COM例外:80040154,已经提供了清单
我为原始dll创建了清单,使用tlbimp.exe生成了一个tyle库,添加了作为项目引用的类型库,并正常地实例化了这个对象。尽管我已经提供的清单文件,我还收到此错误:
System.Runtime.InteropServices.COMException was unhandled
Message=Retrieving the COM class factory for component with CLSID {7B3A2D19-1D82-4DF6-8939-B730058A5535} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Google搜索这一点,这似乎是一个很多人指着构建配置,但我已经把我的构建中使用的x86。我很确定这个DLL也是在x86环境下开发的。 (我不知道这是否是相关或不..)
我所做的:
- 不删除DLL内的内部RT_MANIFEST提供外部清单。
- 使用mt.exe更新RT_MANIFEST。
- 使用由上述两者生成的类型库。
顺便说一句,我也很好奇哪些FILEVERSION或PRODUCTVERSION号码,我应该用于清单内的版本元素? (我都尝试,既不工作)
Properties showing FileVersion and ProductVersion http://i40.tinypic.com/qpjymf.png
请告诉我在哪里我做错了什么?我是否为清单提供了错误信息?我怎么知道我需要更多的清单信息?
如果您需要更多信息,请让我知道。谢谢大家。
据我所知,Windows将优先考虑内部而不是外部(对于Windows Server 2003和更高版本的Windows,为true)。所以我尝试使用mt.exe在DLL和exe文件中嵌入清单。仍然不起作用。 不,更改注册表设置不是一个好主意。 :( – 2012-04-12 07:32:59