我有一个用非托管 C++ 编写的给定代码,我将其添加为 C# 程序中的资源。
尝试使用 Assembly.Load
加载非托管 EXE 时, 我得到一个 BadImageFormatException
其 InnerException 表示“IL 格式不正确”(很明显)。
我怎样才能让它工作?
我知道将代码用作 DLL 会更好,但由于某些原因,dll 调用的行为方式与我使用 System.Diagnostics.Process.Start
运行非托管 exe 时的行为方式不同。 .
而且我不想有两个单独的 EXE 文件。有什么想法吗?
编辑: 好的,我不再需要这样做了。我的 dll 表现不同,因为我在不同的上下文中使用它(winform 而不是控制台);因此导致问题的功能,SetThreadDesktop
,无法按预期工作。现在要关闭帖子,感谢所有回答的人。
最佳答案
您不能使用 Assembly.Load()
加载非托管的 exe/dll,它只适用于托管的。如果你需要在那个非托管文件上调用 PInvoke,而你想要单个 exe 的原因只是部署,你可以将它打包为嵌入式资源(就像你目前所做的那样)并在文件中的目标机器上解压,并将其用作通常。
关于c# - 将非托管 EXE 作为资源合并到托管 C# 代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570422/