在单个可执行文件中组合c#和c++代码

本文关键字:c++ 代码 组合 单个 可执行文件 | 更新日期: 2023-09-27 18:05:15

我如何在一个可执行文件中编写c#和c++代码,最终的Exe是否需要。Net框架?我使用的是Visual Studio 2013.

在单个可执行文件中组合c#和c++代码

从这里

如果你的c++代码没有使用/clr:safe编译(即使用/clr或/clr:pure编译),请执行以下操作:

    编译你的c++代码到。obj文件编译你的c#代码到一个。net模块,使用/AddModule来引用c++ .obj文件
  1. 使用c++链接器将c# .net模块直接链接到c++对象文件,以创建混合语言汇编

如果你的c++代码是用/clr:safe编译的,把你的c++代码构建成一个。net模块。您可以像使用任何其他语言的。net模块一样使用它。

这是一个样本。

这里有很多细节

另一种与任何托管程序集(用c++/CLI或任何。net语言编写)一起工作的方法是将该程序集作为资源添加到可执行项目中。因此,如果该程序集没有出现在与您的exe一起的目录中,则将使用以下代码从资源中加载该程序集。

在exe中,您应该注册到程序集解析事件:

AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
    {
        Assembly asm = null;
        if (e.Name == "otherAssembly.dll")
        {
            byte[] assemblyBytes = // code to retrieve assembly from resources.
            asm = Assembly.Load(assemblyBytes);
        }
        return asm;
    };