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

时间:2014-05-25 06:22:24

标签: c# c++ visual-studio

如何在单个可执行文件中使用C#和C ++代码,并且Final Exe是否需要Net Framework。 我正在使用Visual Studio 2013。

2 个答案:

答案 0 :(得分:1)

来自here

如果您的C ++代码未使用/ clr:safe编译(即使用/ clr或/ clr:pure编译),请执行以下操作:

  1. 将您的C ++代码编译为.obj文件
  2. 将您的C#代码编译为.netmodule,使用/ AddModule引用C ++ .obj文件
  3. 使用C ++链接器将C#.netmodule直接链接到C ++目标文件以创建混合语言程序集
  4. 如果您的C ++代码是使用/ clr:safe编译的,请将您的C ++代码构建为.netmodule。您可以像使用任何其他语言的.netmodule一样使用它。

    Here is a sample

    Here in great detail

答案 1 :(得分:0)

另一种适用于任何托管程序集(用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;
    };