【问题标题】:Call into 64bit Dephi DLL from C# on 64bit Machine在 64 位机器上从 C# 调用 64 位 Delphi DLL
【发布时间】:2011-12-21 04:02:37
【问题描述】:

我的 c# 应用程序正在尝试将 Delphi DLL 构建为 64 位。我不断收到一条错误消息,指出“尝试加载格式不正确的程序。(HRESULT 异常:0x8007000B”。我在 Windows 7 64 位机器上运行并将我的 C# 项目设置为任何 CPU。

API 调用

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

Encrypt(plainString, encText);    

如果 Delphi DLL 构建为 32 位,则此调用可以正常工作。有什么想法吗?

【问题讨论】:

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

标签: c# delphi winapi 64-bit


【解决方案1】:

由于某种原因,您的应用不是作为 64 位而是作为 32 位进程运行的。如果你需要做这样的事情,最好指定“x64”而不是“AnyCPU”。

【讨论】:

  • 如果有任何疑问,ProcessMonitor (SysInternals.com) 会验证宿主进程是以64还是32运行。
  • 如果应用程序是 32 位的,那么可能没有充分的理由制作 64 位 DLL。听起来很酷,就是这样。除非你有一个 64 位的应用程序,或者正在构建一个 shell 扩展 DLL,否则不需要 64,因为操作系统是 64 位的。
  • (或广义:64位、操作系统、IE或第三方的插件)
猜你喜欢
  • 2019-03-09
  • 2011-08-08
  • 2011-12-25
  • 1970-01-01
  • 2015-03-19
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
相关资源
最近更新 更多