繁体   English   中英

在.NET应用程序中使用免费注册com

[英]Using registration free com in a .NET app

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

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

异常:System.InvalidCastException消息:无法将类型为“LOGICLib.LogicClass”的COM对象强制转换为接口类型“LOGICLib.ILogic”。 此操作失败,因为由于以下错误,对IID为“{AAAAAAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAAA 。 来源:Interop.LOGICLib at LOGICLib.LogicSecuredClass.Connect(String IP,UInt16 Value,Int32&Result)位于D:\\ MyProject \\ Source \\ Server \\ MyAssembly \\ Loader.cs中的My.Server.MyAssembly.Loader.Connect():行461

应用程序清单以启动服务的exe命名 - 我也尝试在调用COM DLL的程序集之后命名它。 我试过在命令行和Visual Studio的调试器上启动。 我也尝试使用第三方提供的Interop文件并生成自己的文件。

(注意 - 到目前为止我只在Windows XP下测试过。)

我现在花了两天时间在这上面并没有取得任何进展。 我可能错过了什么想法?

应用程序清单以启动服务的exe命名

是的,这不起作用。 Windows始终在EXE本身中查找清单,作为非托管资源嵌入。 只有当它找不到那个时才会在磁盘上查找.manifest文件。 问题是,使用VS2008构建的托管程序已经有了清单。 默认的只有“我知道Vista”。

您可以使用File + Open + File并选择您的EXE来自行验证。 打开RT_MANIFEST节点,然后双击资源1.如果没有看到您的免注册COM清单条目,那么它将不起作用。

要修复,请使用Project + Add New Item并选择Application Manifest File项目模板。 您将获得样板清单,在那里复制并粘贴您的regfree COM条目。

好吧,从异常中,当您尝试将LogicClass类型的对象强制转换为ILogic的接口类型时,您会收到强制转换错误。 看起来LogicClass没有实现ILogic。

你没有提供DLL或你得到它的地方,所以你最好的办法是查看你想要使用的库的文档。 只是一个疯狂的猜测,但看起来你正在错误地实现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM