将本机dll或.NET程序集嵌入COM

Embed native dll or .NET assembly into COM

本文关键字:COM 程序集 NET 本机 dll      更新时间:2023-10-16

我有一个.NET库,我想用COM包装它,从C++调用它的函数。幸运的是,这个库是开源的,如果我在这个项目中添加COM可见类,它就会起作用:

[Guid("38F752CC-20F1-4729-B1E3-EE0AAD145052")]
public interface IQRCodeUI
{
    string GetDecodedString(string encodedString);
}
[Guid("D4CFCDFA-6718-494D-A23F-EBC0F9550377")]
public class QRCodeUI : IQRCodeUI
{
    public string GetDecodedString(string encodedString)
    {
        return decoder.decode(encodedString);
    }
}

decoder就是这个库中的一个类。

但若我已经编译了程序集,该怎么办呢?我试图创建类库(COM)并将.NET库作为嵌入资源添加到其中。但没有结果!在编译过程中,它说了类似cannot register assembly "pathname". Cannot load file or assembly "nameOfAssembly" or its dependency. Cannot find the file.道歉的话,我无法提供错误的原始文本,因为我有MSVS,它的语言与英语不同。有可能解决这个问题吗?

如果您的任务是通过COM从C++调用.NET库,为什么要将.NET库作为嵌入资源添加到一些新的COM类库中?

只需使现有的第三方程序集COM可见,并从C++、VB6等调用它。

互联网上有很多关于如何使.NET程序集COM可见的文档。我记得,其中没有一个包含将.NET程序集嵌入COM类程序集中的建议。

从以下内容开始:编写COM可见程序集(C#)的最佳实践