3

我有一个使用 C/C++ 编写的非托管 32 位库的 C#(.NET 3.5,VS2005 Professional)应用程序。我使用的 API 是这样的:

无效*初始化(int x);

语音GetData(无效*);

当我在 Windows XP 32bit 上运行它时,这有效,但在 Windows XP64bit 上它会抛出异常:

未处理的异常:System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.BadImageFormatException:尝试加载格式不正确的程序。(HRESULT 异常:0x8007000B)在 Aktuelizator.CommonLibrary.InitializeRingBuffer(Int32 dim) 在 Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor()

当从 32 位调用时,这些非托管 DLL 在 64 位 XP 下的工作取消管理 C/C++ 中的应用程序 writetn。

有人有什么主意吗?

4

3 回答 3

2

您的构建配置平台设置为“任何 CPU”,这意味着在 64 位操作系统上它以 64 位运行,您无法加载 dll。将其设置为 x86,这将强制它以 32 位运行,无论操作系统如何,您的 dll 都可以正常加载。

于 2009-04-16T10:41:43.497 回答
1

It sounds like your DLL is only compiled to 32 bit, but you try to call it from both a 32 bit and 64 bit process. The former will work, of course. The later, however, won't. 32 bit DLLs can only be used in 32 bit processes. Try compiling the DLL to a 64 bit target and let the C# app use that one.

于 2009-04-16T10:17:18.593 回答
0

检查所有定义为 Int32 的参数,实际上应该是 IntPtr。

于 2009-04-16T10:28:15.213 回答