如何调试注册表免费COM?

如何调试注册表免费COM?,com,regfreecom,sxs,Com,Regfreecom,Sxs,我在包装一些第三方COM组件时遇到了麻烦。实际上,它是一个COM组件和几个.NET程序集。NET程序集又依赖于同一第三方的内部COM组件。注册COM DLL后,我的代码工作正常(现在我正在从C#进行测试)。如果我不这样做,它就会失败。调试它的最佳方法是什么 我通过添加对COM组件的引用来生成SxS清单,设置Isolated=true,然后从清单中将生成的comClass元素提取到我自己的SxS清单中。另外,它似乎创建了一个Interop.XXX.dll文件:这是做什么用的 一些示例错误消息: "

我在包装一些第三方COM组件时遇到了麻烦。实际上,它是一个COM组件和几个.NET程序集。NET程序集又依赖于同一第三方的内部COM组件。注册COM DLL后,我的代码工作正常(现在我正在从C#进行测试)。如果我不这样做,它就会失败。调试它的最佳方法是什么

我通过添加对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"

这是您可以从reg free COM获得的最基本故障,它没有使用清单或清单不正确。验证清单中是否有一个命名COM DLL的
元素,并包含一个带有“clsid”属性的
元素,该属性的guid与异常消息所抱怨的guid相同


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

My bad…清单很好,但没有被使用,因为我正在调试VS宿主进程。在没有调试或主机进程关闭的情况下,它按预期工作。但是,有很多方法可以得到相同的错误,这是非常令人沮丧的!第二个问题是什么:“它似乎创建了一个Interop.XXX.dll文件:这是干什么用的?”这是为任何COM组件自动生成的。它以CLR喜欢的格式包含COM类型的.NET兼容声明。可通过.NET4“嵌入互操作类型”功能避免。只需与其他组件一起装运即可。