delphi升级后调用外部dll

时间:2015-10-13 08:09:23

标签: delphi

我已将Delphi 2007应用程序升级到Delphi Seattle。在Delphi 2007中,我有一个Fortran DLL,它是从我的Delphi应用程序中调用的。升级后,我收到错误'找不到过程终点'。请注意,Fortran DLL没有变化,并且dll与应用程序exe的路径相同

Delphi的调用代码是

type
  TArrayOfTypeNos= array [1..1000] of Integer;
....
procedure CallFunc(
  Idx : Integer; 
  var Nos : Integer;
  var ProductTypes : TArrayOfTypeNos
); stdcall; external 'MyFortranDLL.dll' name '_ThisIsFuncNameinFortran';

有人可以告诉我一些可能出错的事吗?

我得到的错误是:

  

无法在动态链接库中找到过程入口点_ThisIsFuncNameinFortran

2 个答案:

答案 0 :(得分:2)

Delphi 2007和Delphi 10 Seattle之间没有任何变化以任何方式影响问题中显示的功能。

在Unicode前Delphi和Unicode Delphi之间移动时出现的常见问题与字符和字符串类型的处理差异有关。因此,Char以前是AnsiChar的别名,但现在是WideChar的别名。同样适用于PCharstring等。但事实并非如此。您使用的类型在Delphi 2以上的所有Delphi版本中具有相同的含义。

错误消息是:

  

无法在动态链接库中找到过程入口点_ThisIsFuncNameinFortran。

只有一种方法可以解释该错误消息。已找到DLL,但它实际上不会导出具有该名称的函数。检查实际加载的DLL是否是您要加载的DLL。 Dependency Walker或类似的工具可能会有所帮助。

答案 1 :(得分:0)

如果DLL确实没有改变,那么这个代码应该在D2007中失败了。它在2007年运行但在西雅图失败的事实可能意味着相同的DLL 被加载。您可以使用Process ExplorerProcess Monitor之类的工具来查看实际加载的DLL。并使用Embarcadero的TDUMP实用程序来查看DLL实际导出的函数。