我正在开发一个C ++ / CLI包装器,用于在QT 4.5中开发的dll。我只有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")
则没有例外
我使用的是Windows 7 64位,并且希望将x86作为首选选项,因为应用程序也需要在64位系统上运行。
项目设置:
C ++ / CLI中的包装 - Win32
C#console application - x86
来自CORFLAGS的输出
C ++ / CLI包装器(输出是一个DLL,引用32位QT dll)
版本:v4.0.30319
CLR标题:2.5
PE:PE32
CorFlags:16
ILONLY:0
32BIT:0
签名:0
我将DLL的32位标志设置为1,但异常仍然存在。当我重建dll时,它再次设置为0。
C#控制台应用程序(输出为EXE)
版本:v4.0.30319
CLR标题:2.5
PE:PE32
CorFlags:3
非法:1
32BIT:1
签名:0
如何让控制台应用程序与包装器一起使用?
答案 0 :(得分:0)
当程序无法找到dll或其中一个依赖项时会发生这种情况。
大多数情况下,在混合的本机管理项目中,缺少的依赖项是在构建过程中未被复制的本机dll。
引用的.Net库通常被复制到输出编译目录,而本机依赖项默认情况下不会被Visual Studio复制。