我正在使用win7和 Delphi 2010。这是我的代码。
library CFGFunc;
uses
sysUtils
Un_ExFuncDll in "base\Un_ExFuncDll.pas"
...
exports
LoadExFuncsInDLL,
...
Un_ExFuncDll.pas在这里
unit Un_ExFuncDll;
interface
uses
Classes;
procedure LoadexfuncsIndll(); stdcall;
...
编译后,dll不工作。但是,我在Un_ExFuncDll.pas
中将LoadexfuncsIndll()
替换为LoadExFuncsInDLL()
(与导出中的内容完全匹配)。然后,它工作。
Delphi 不区分大小写。但似乎dll中的导出是区分大小写的。他们是怎么回事
2条答案
按热度按时间vd8tlhqk1#
导入/导出DLL函数是区分大小写的,而且一直如此。该行为与OS DLL加载程序绑定,后者区分大小写。这是 Delphi 语言中区分大小写的唯一领域之一。这是有记录的行为,至少部分是:
Writing Dynamically Loaded Libraries
name说明符由指令name和字符串常量组成。如果条目没有name说明符,则例程将以其原始声明的名称导出,具有相同的拼写和大小写。如果要以不同的名称导出例程,请使用name子句。
程序和函数( Delphi )
在导入声明中,确保与例程名称的拼写和大小写完全匹配。以后,当您调用导入的例程时,该名称不区分大小写。
mxg2im7a2#
如果你有数百个导出的函数和未知数量的dll,并且你无意中使用了一些导出例程的名称,这是一个真实的的PIA。
有个办法可以解决