【发布时间】:2015-02-01 13:47:06
【问题描述】:
我正在为 QT 4.5 中开发的 dll 开发 C++/CLI 包装器。我只有 QT dll 及其头文件。 QT dll 是 32 位 dll。
当我尝试从我的 C# 控制台应用程序调用我的 C++/CLI 包装器时,我看到了 BadImageException。
using GWrapper;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("WELCOME");
GWrapper wrapper = new GWrapper();
wrapper.CallAMethod(someText);
}
}
如果我只保留Console.Writeline("WELCOME") 也不例外
我使用的是 64 位 Windows 7,并希望将 x86 作为首选选项,因为应用程序也需要在 64 位系统上运行。
项目设置:
C++/CLI 中的包装器 - Win32
C# 控制台应用程序 - x86
CORFLAGS 的输出
C++/CLI 包装器(输出是一个 DLL,并引用一个 32 位 QT dll)
版本:v4.0.30319
CLR 标头:2.5
PE : PE32
CorFlags:16
只有:0
32位:0
签名:0
我将 DLL 的 32 位标志设置为 1,但异常仍然存在。当我重建 dll 时,它又被设置为 0。
C# 控制台应用程序(输出为 EXE)
版本:v4.0.30319
CLR 标头:2.5
PE : PE32
CorFlags : 3
只有:1
32位:1
签名:0
如何使控制台应用程序与包装器一起工作?
【问题讨论】:
-
你检查了吗msdn.microsoft.com/en-us/library/…列出了一些可能的原因。
-
我试过了,但是程序启动时抛出异常
-
您确定您没有将控制台应用程序编译为
ANY CPU?如果确定两个项目都编译为c# --> x86和c++/cli --> Win32,您是否仔细检查了配置管理器 -
终于我成功了。这不是因为架构,而是因为缺少 QT dll。这种例外有时会产生误导。感谢您的所有 cmets。
标签: c# visual-studio-2010 qt c#-4.0 c++-cli