【发布时间】:2012-03-05 16:43:36
【问题描述】:
我有一个用非托管 C++ 编写的给定代码,我将其作为资源添加到 C# 程序中。
当尝试使用 Assembly.Load 加载非托管 EXE 时,我得到一个 BadImageFormatException,其 InnerException 显示“IL 格式不正确”(显然)。
我怎样才能做到这一点?
我知道将代码用作 DLL 会更好,但由于某种原因,dll 调用的行为与我使用 System.Diagnostics.Process.Start 运行非托管 exe 时的行为不同。
而且我不想有两个单独的 EXE 文件。有什么想法吗?
编辑:好的,我不再需要这样做了。我的 dll 表现不同,因为我在不同的上下文中使用它(winform 而不是控制台);因此导致问题的函数SetThreadDesktop 无法按预期工作。现在要关闭帖子了,感谢所有回答的人。
【问题讨论】:
-
你想用这个非托管的可执行文件做什么?运行?您必须保存嵌入式 EXE,可能保存到 %TEMP% 路径,并使用
Process.Start来启动它。然后使用WaitForExit,并删除EXE进行清理。 -
这确实是个好主意,但我宁愿在不生成嵌入式 EXE 的情况下完成这项工作
-
您应该能够使用 C++/CLI 编译器将 C++ 编译为混合模式程序集,并将其与您的 C# 代码链接到单个文件中。