ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用本机/托管环境将无注册COM清单嵌入到C#dll中

2019-07-08 16:08:25  阅读:226  来源: 互联网

标签:c net com-interop regfreecom activation-context-api


我目前正在开发一个混合的本机/托管应用程序链,它使用免注册COM.下图说明了这一点:

使用tlbimp.exe实用程序创建了C#包装器DLL.这允许每个C#可执行文件访问COM DLL中的本机类型和方法. COM DLL本身使用基于服务器的RegFree COM清单.

当基于客户端的RegFree COM清单嵌入在C#可执行文件中时,一切正常.但是,我想将这些清单文件移动并统一到C#DLL中,这样可以显着简化版本信息的维护和同步.

由于Visual Studio不提供将清单文件嵌入C#类库的选项,因此我尝试使用清单工具(mt.exe)提取,修改和重新嵌入DLL的默认清单.这似乎有效,因为当用mt查询时,C#DLL现在暴露了以下清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity name="FirstClient" version="1.0.0.0" processorArchitecture="msil"></assemblyIdentity><file name="FirstClient.dll" hashalg="SHA1"></file>
<dependency>
            <dependentAssembly>
                        <assemblyIdentity type="win32" name="atl" version="1.0.0.0"></assemblyIdentity>
            </dependentAssembly>
</dependency>
</assembly> 

但是,可执行文件拒绝工作,每个人抱怨COM类工厂无法找到丢失的COM模块.

我在这里忽略了什么吗?谢谢.

解决方法:

我通过调整适当的激活上下文函数来实现它.感谢Hans Passant的暗示.

标签:c,net,com-interop,regfreecom,activation-context-api
来源: https://codeday.me/bug/20190708/1403439.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有