4

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

com

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

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

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

<?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 模块。

有什么我在这里忽略的吗?谢谢。

4

1 回答 1

1

我通过调用适当的激活上下文函数来使其工作。感谢Hans Passant的提示。

于 2014-09-26T18:26:32.690 回答