我已经将我的 Delphi 2007应用程序升级到Delphi西雅图。在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
3条答案
按热度按时间kcrjzv8t1#
在 Delphi 2007和Delphi 10西雅图之间没有任何变化会以任何方式影响问题中显示的函数。
在Unicode Delphi 之前的版本和Unicode Delphi之间转换时出现的常见问题,与字符和字符串类型的处理方式不同有关。因此,
Char
以前是AnsiChar
的别名,但现在是WideChar
的别名。同样,对于PChar
,string
等等。但这里不是这样的。你使用的类型在Delphi 2以上的所有 Delphi 版本上都有相同的含义。错误消息为:
在动态链接库中找不到过程入口点_ThisIsFuncNameinFortran。
只有一种方法可以解释该错误信息。DLL已经找到,但它确实没有导出具有该名称的函数。请检查实际加载的DLL是否确实是您要加载的DLL。Dependency步行者或类似的工具可能会有所帮助。
ui7jx7zq2#
如果DLL确实没有更改,这段代码在D2007中应该已经失败了。它在2007中可以工作,但在西雅图中失败的事实可能意味着同一个DLL没有被加载。你可以使用Process Explorer或Process Monitor之类的工具来查看哪个DLL实际上被加载了。然后使用Embarcadero'的TDUMP公用程式,以查看DLL实际汇出的函式。
6yoyoihd3#
我遇到了同样的问题与 Delphi 10. 4使用微芯片dll。相同的代码& dll工程完美的fpc &拉撒路。
函数的名称类似于.h文件中的Mcp2221_OpenByIndex,但在dll中则是带有前导下划线的_Mcp2221_OpenByIndex;函数定义为:
MCP_DLL是一个包含名称的常量。当我删除下划线时,找不到这个函数。如果我在所有函数中添加下划线,第二个函数仍然会出现错误。