2011-07-04 88 views
0

我有一个凌乱的情况包裹几个第三方COM组件。实际上它是一个COM组件和几个.NET程序集。 .NET程序集依次取决于同一第三方的内部COM组件。当我有COM DLL注册时,我的代码工作正常(现在我正在从C#测试)。当我不这样做时,它就会失败。调试的最佳方法是什么?如何调试注册表免费COM?

我通过添加对COM组件的引用来生成SxS清单,设置Isolated = true,然后从清单中将生成的comClass元素提取到我自己的SxS清单中。此外,它似乎创建一个Interop.XXX.dll文件:这是什么?

一些典型的错误消息:

"Retrieving the COM class factory for component with CLSID {012A4BEB-99EC-4A65-A4AF-7D09A20B5034} failed due to the following error: 80040154." 

"HSREADWRITELib::ReadWriteData, CreateInstance" 

回答

2

这是最基本的故障,您可以从REG-COM免费得到的,所以不能用清单或清单不正确。验证您的清单是否具有名称为COM DLL的<file>元素,并且包含<comClass>元素,其中的“clsid”属性具有与异常消息所抱怨的相同的guid。

然后确保清单被嵌入在客户端可执行文件中。您可以在Visual Studio中使用File + Open + File查看它,打开RT_MANIFEST节点。

+0

我的坏...清单很好,但没有被使用,因为我正在调试VS托管过程。如果不进行调试或托管进程关闭,它按预期工作。虽然有很多方法可以得到相同的错误,但这非常令人沮丧! 第二个问题呢?“它似乎创建了一个Interop.XXX.dll文件:这是什么文件?” –

+0

这是为任何COM组件自动生成的。它以CLR喜欢的格式包含COM类型的.NET兼容声明。 .NET 4“嵌入互操作类型”功能可避免。随同其他组件一起发货。 –