在单个可执行文件中组合c#和c++代码
本文关键字:c++ 代码 组合 单个 可执行文件 | 更新日期: 2023-09-27 18:05:15
我如何在一个可执行文件中编写c#和c++代码,最终的Exe是否需要。Net框架?我使用的是Visual Studio 2013.
从这里
如果你的c++代码没有使用/clr:safe编译(即使用/clr或/clr:pure编译),请执行以下操作:
- 编译你的c++代码到。obj文件编译你的c#代码到一个。net模块,使用/AddModule来引用c++ .obj文件
- 使用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;
};