2011-11-03 123 views
2

我的C#应用​​程序我想调用一个Delphi DLL构建为64位。我一直收到一个错误,指出“试图加载程序的格式不正确(来自HRESULT的异常:0x8007000B”)。我在Windows 7 64位计算机上运行,​​并将我的C#项目设置为任何CPU。在64位机器上调用64位Dephi DLL从C#在64位机器上

API调用

[DllImport("Cipher.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.ThisCall)] 
public static extern void Encrypt(StringBuilder szPlainText, StringBuilder zCipherText); 

Encrypt(plainString, encText);  

如果德尔福DLL被建设成为32位此调用正常工作。任何想法?

+1

'ThisCall'是错误的。德尔福不这样做。使用'stdcall'。 –

回答

4

出于某种原因,你的应用是不是64位的运行,而是一个32位如果你需要这样做,最好指定“x64”而不是“AnyCPU”。

+2

如果有任何疑问,ProcessMonitor(SysInternals.com)将验证主机进程是以64还是32运行。 –

+0

如果应用程序是32位的,那么可能没有一个好理由制作64位DLL 。这听起来很酷,就是这样。除非你有一个64位应用程序,或者正在构建一个外壳扩展DLL,否则仅仅因为操作系统是64位就不需要64个。 –

+0

(或泛化:插入64位,操作系统,IE或第三方的东西) –