我们有一个使用 Boost 1.54.0 和 QT 4.8.6 用 C++ 开发的用户界面。 该接口(interface)可以调用计算模块。每个模块必须实现一个(非纯)抽象类,并链接到在接口(interface)编译期间生成的给定 .lib。启动界面后,我们指出使用QLibrary加载的模块dll的路径。
一切都与原生 C++ 模块完美配合,但最近我们开始使用 .NET 3.5 (C#) 开发新模块。我们希望接口(interface)可以调用这个模块,所以我们决定使用\clr 创建一个中间 c++ 项目:这个项目实现了抽象类,并且可以调用托管的 .NET 代码,这要归功于\clr 模式。
现在我们有一个大问题:我们无法实现正确加载中间 C++ 问题。我们尝试使用 kernel32 方法 LoadLibrary 并获得错误代码 193 (ERROR_BAD_EXE_FORMAT)。这是非常令人惊讶的,因为所有项目都是为 Win32/x86 编译的,并且计算机使用的是 Windows Vista 32 位。
dependancy walker 一切似乎都很正常:
我们使用了 dumpbin 但一切似乎都很正常:
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file Lien.dll
PE signature found
File Type: DLL
FILE HEADER VALUES 14C machine (x86)
6 number of sections 53CF72B5 time date stamp Wed Jul 23 10:30:45 2014 0 file pointer to symbol table 0 number of symbols E0 size of optional header 2102 characteristics Executable 32 bit word machine DLL
最佳答案
感谢 Patrice Pezillier 提供的链接。 该问题已通过使用您的链接得到解决:boost 是罪魁祸首。
关于c++ - 使用\clr 的 C++ DLL 的 LoadLibrary 出现莫名其妙的错误 193,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906300/