【问题标题】:Delphi dll throwing An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) when called in c#Delphi dll throwing 试图加载格式不正确的程序。 (来自 HRESULT 的异常:0x8007000B)在 c# 中调用时
【发布时间】:2013-05-30 07:41:41
【问题描述】:

我有一个 delphi dll,我在我的网络应用程序中使用互操作服务调用它。在平台目标中调用 dll 的 Web 应用程序设置为任何 cpu。 当我在我的控制台应用程序中测试它时,它的平台目标是 x86,它加载并调用 dll 没有错误。如果我将控制台应用程序平台目标更改为任何 cpu,它会给出相同的错误。我无法更改 Web 应用程序的平台目标。我该如何克服呢? 是不是delphi dll是针对使用x86的。我可以编译delphi项目以使用Borland Delphi 7中的任何cpu吗?非常感谢帮助。 这是我的导入声明-

    [DllImport(@"Decoder.dll", CharSet = CharSet.Unicode)]
    static extern Int32 CALinkDecode(
        string sCode,
        out int SubscriberID,
        out int MailshotID,
        out int LinkID
    );

    Int32 retvalptr = CALinkDecode(sCode, out cas,
                                           out cam, out cal);

【问题讨论】:

  • 另一种选择是抛弃 Delphi 代码并成为纯 C#。你的 webapp 是否使用了一个以上的解码函数?
  • 只使用delphi解码功能。
  • 你能具体说说函数名吗?请准确的名字。当您的目标通过 .net 实现微不足道时,我有强烈的感觉您在浪费时间在 Delphi 上。
  • David 发生的事情是有一个遗留的 delphi 应用程序,它使用 base32 将三个值编码为一个字符串。还有一个解码这个字符串并返回三个值的delphi dll。我想用这个解码器。
  • 我不会那样做。移植到 .net 代码将是微不足道的。

标签: c# asp.net delphi iis


【解决方案1】:

你有两个选择,

  • 升级到较新的 Delphi 版本,以便您可以将库项目重新编译为 x64。然后就可以加载了。
  • 坚持 x86 编译,并强制 Web 应用程序以 32 位运行。如果 Web 应用程序托管在 IIS 中,您可以更改应用程序池设置。

http://www.codeproject.com/Tips/325824/Running-a-32-bit-application-under-IIS-on-a-64-bit

【讨论】:

  • 谢谢。我想我更喜欢第二种选择。有什么建议么。我已经下载了 Borland Delphi 7。
  • 随附的 CodeProject 文章讨论了如何更改 IIS 设置。请尝试这些步骤。
  • 对不起 Lex,我的意思是第一个选项。关于免费的较新 ide 的任何建议。
  • Delphi 不是免费的。您需要为 x64 编译器付费。或者使用FPC。除非您指的是非法盗版版本,否则您无法下载 Delphi 7。如果是这样,你真丢脸。
  • 如果您对 Delphi 7 的功能集没问题,那么也许使用 FPC 的 CodeTyphon 发行版对您来说完全足够了。
【解决方案2】:

很明显,您有一个 32 位 DLL,无法在 64 位进程中加载​​。要么制作 64 位版本的 DLL,要么将 IIS 配置为在 32 位进程中托管 DLL。

但是,我怀疑根本不需要您的 DLL。您似乎正在使用它来执行一些琐碎的文本处理。将其移植到 .net 并避免所有这些复杂性可能会更简单。完成此操作后,您将永远摆脱这种依赖关系。

【讨论】:

  • 嗨,大卫,是的,从长远来看,这将是解决方案。感谢您的帮助。
  • @StylesYoung 然后也许考虑 RemObjects Oxygen 或 PascalABC.Net
  • @Arioch C# 是显而易见的选择,因为应用程序是用该语言编写的
  • @DavidHeffernan 创造一些新的和简单的东西 - 是的。移植继承的代码——也许没有。至少主题启动者害怕这样做。我们没有看到代码,我们不知道它可能有多复杂和低级。
  • @Arioch base 32 有多复杂?您的建议很复杂。
猜你喜欢
  • 2011-08-14
  • 2016-05-09
  • 2017-12-31
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多