我正在尝试使用.NET服务中的第三方com dll(我不相信它的.NET组件)而没有注册COM DLL,但是到目前为止,我没有运气。

我已经从此处复制了清单文件(http://stackoverflow.com/questions/465882/465882/generate-manifest-files-for-for-registration-free-free-com)作为起点(我使用Com Dll Sustrets使用引用的mt.exe/regsvr42.exe)。但是我得到的只是以下错误:

异常:system.invalidcastException消息:无法将“ logiclib.logicClass”类型的com对象施加到接口类型'logiclib.ilogic'。 This operation failed because the QueryInterface call on the COM component for the interface with IID '{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)) 。资料来源:interop.logiclib在logiclib.logicsecuredclass.connect(字符串IP,uint16 value,int32&result)在d: myProject myproject source source server server server server myAssembly.loader.cs:loader.cs:loader.cs:loader.cs: 461

应用清单是以启动服务的EXE命名的 - 我还尝试在调用COM DLL的汇编后命名。我已经尝试从命令行和Visual Studio的调试器开始。我还尝试使用第三方提供的Interop文件并生成我自己的文件。

(注意 - 到目前为止,我仅在Windows XP下进行了测试。)

我现在花了两天时间,根本没有进步。有什么想法我可能错过了什么?

有帮助吗?

解决方案

应用清单以启动服务的EXE命名

是的,这不起作用。 Windows总是在EXE本身中寻找清单,并嵌入到不受管理的资源中。只有在找不到其中一个时,才会在磁盘上查找.manifest文件。问题是,由VS2008且UP已经有一个明显的托管程序。默认的一个人说“我是Vista意识到”。

您可以通过使用文件 + Open +文件并选择您的EXE来亲自验证这一点。打开RT_MANIFEST节点和双击资源1.如果您看不到无需登记的COM清单条目,则它将无法正常工作。

要修复,请使用项目 +添加新项目,然后选择应用程序清单文件项目模板。您将获得样板清单,复制并粘贴到其中的Regfree Com条目。

其他提示

好吧,从异常来看,当试图将类型逻辑的对象施加到接口类型的iLogic时,您会遇到铸造错误。看起来LogicClass无法实现ilogic。

您没有提供DLL是什么或获得的位置,因此最好的选择是查看您要使用的库的文档。只是一个疯狂的猜测,但看起来您正在错误地实施它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top