将C#和C ++代码合并到单个EXE中

时间:2013-09-26 08:57:53

标签: c# .net dll linker c++-cli

我有一个使用VS2008用C#编写的小型WPF应用程序。对于一个特定的任务,我想使用一些C ++ / CLI代码(因为它需要大量的本机互操作)。

我知道我可以将C ++ / CLI代码编译为DLL,然后从C#app引用它,但是当有问题的代码相当小时,这似乎很愚蠢。我想将它们构建到同一个文件中。 (并且无需在运行时提取DLL。)

通过一些命令行编译器魔术(类似于显示here)我已经设法成功地将其编译并在将C ++代码编译为C#DLL时用于不同的应用程序。

当尝试将C ++代码编译到C#EXE时,当编译和链接工作正常时,尝试运行生成的可执行文件会导致以下错误:

  

尝试运行项目时出错:尝试使用fixups加载无法验证的可执行文件(IAT包含2个以上的部分或TLS部分。)(HRESULT异常:0x80131019)

命令行基本上是:

cl /nologo /clr /Zi /MDd /DWIN32 /D_LIB /FUmanaged.dll /c interface.cpp /FoDebug\interface.obj
csc /target:module /addmodule:Debug\interface.obj /r:managed.dll App.cs MainWindow.xaml.cs Debug\MainWindow.xaml.g.cs Properties\AssemblyInfo.cs /out:Debug\Program.netmodule
link /entry:TestApp.App.Main /subsystem:Windows /clrimagetype:ijw /debug /ltcg /manifest /out:Debug\TestApp.exe Debug\App.netmodule Debug\interface.obj

任何出错的想法? (managed.dll是一个单独的C#DLL,包含代码的两个部分所需的通用定义。我可以将它保持分离并且它与手头的问题没有关系,但我已经将它包含在内以保证完整性。)< / p>

工作DLL版本的链接命令行基本相同,只是它使用/dll而不是/entry: /subsystem: /clrimagetype:。我已经尝试删除每一个,只有最后一个似乎是可选的,删除它没有帮助。

0 个答案:

没有答案
相关问题