首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从C/C++调用.NET程序集?

如何从C/C++调用.NET程序集?
EN

Stack Overflow用户
提问于 2008-09-19 22:06:38
回答 9查看 21.5K关注 0票数 28

假设我正在用C++和C#编写一个应用程序。我想用C++编写底层部分,用C#编写高层逻辑。如何从C++程序加载.NET程序集并开始调用方法和访问C#类的属性?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-09-19 22:19:00

代码语言:javascript
运行
复制
[Guid("123565C4-C5FA-4512-A560-1D47F9FDFA20")]
public interface IConfig
{
    [DispId(1)]
    string Destination{ get; }

    [DispId(2)]
    void Unserialize();

    [DispId(3)]
    void Serialize();
}

[ComVisible(true)]
[Guid("12AC8095-BD27-4de8-A30B-991940666927")]
[ClassInterface(ClassInterfaceType.None)]
public sealed class Config : IConfig
{
    public Config()
    {
    }

    public string Destination
    {
        get { return ""; }
    }

    public void Serialize()
    {
    }

    public void Unserialize()
    {
    }
}

在此之后,您需要对您的程序集进行regasm。Regasm将添加必要的注册表项,以允许您的.NET组件被视为COM组件。之后,您可以像调用任何其他COM组件一样,在C++中调用您的.NET组件。

票数 12
EN

Stack Overflow用户

发布于 2008-09-19 22:34:45

你真的应该研究一下C++/CLI。它使得这样的任务变得近乎微不足道。

否则,您将不得不围绕C#代码生成COM包装器,并让您的C++应用程序调用COM包装器。

票数 13
EN

Stack Overflow用户

发布于 2008-09-20 01:50:49

我肯定会为此研究C++/CLI,并避免COM和所有容易产生的注册麻烦。

使用C++的动机是什么?如果只是简单的风格,那么你可能会发现你可以用C++/CLI编写所有的东西。如果是性能,那么在托管C++和非托管代码之间来回调用是相对直接的。但它永远不会是透明的。您不能首先将托管指针传递给非托管代码,而不将其固定,这样垃圾回收器就不会移动它,当然,非托管代码也不会知道您的托管类型。但是托管(C++)代码可以知道您的非托管类型。

另一件要注意的事情是,包含非托管代码的C++/CLI程序集将是特定于体系结构的。您将需要为x86和x64 (以及IA64)单独构建。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/106033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档