我已将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
答案 0 :(得分:2)
Delphi 2007和Delphi 10 Seattle之间没有任何变化以任何方式影响问题中显示的功能。
在Unicode前Delphi和Unicode Delphi之间移动时出现的常见问题与字符和字符串类型的处理差异有关。因此,Char
以前是AnsiChar
的别名,但现在是WideChar
的别名。同样适用于PChar
,string
等。但事实并非如此。您使用的类型在Delphi 2以上的所有Delphi版本中具有相同的含义。
错误消息是:
无法在动态链接库中找到过程入口点_ThisIsFuncNameinFortran。
只有一种方法可以解释该错误消息。已找到DLL,但它实际上不会导出具有该名称的函数。检查实际加载的DLL是否是您要加载的DLL。 Dependency Walker或类似的工具可能会有所帮助。
答案 1 :(得分:0)
如果DLL确实没有改变,那么这个代码应该在D2007中失败了。它在2007年运行但在西雅图失败的事实可能意味着相同的DLL 不被加载。您可以使用Process Explorer或Process Monitor之类的工具来查看实际加载的DLL。并使用Embarcadero的TDUMP实用程序来查看DLL实际导出的函数。