非托管DLL代码

时间:2009-04-16 09:46:30

标签: unmanagedresources

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

void * Initialize(int x);

voic GetData(void *);

当我在Windows XP 32bit上运行它时,这是有效的,但在Windows XP64bit上它会引发异常:

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

当使用C / C ++中的32位非管理应用程序编写调用时,这些非托管DLL在64位XP下运行。

有没有人有任何想法?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

听起来您的DLL只编译为32位,但您尝试从32位和64位进程调用它。当然,前者会起作用。然而,后者不会。 32位DLL只能用于32位进程。尝试将DLL编译为64位目标,让C#应用程序使用该目标。

答案 2 :(得分:0)

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