检查dll函数中是否存在参数(Delphi 5)

时间:2016-03-22 04:38:35

标签: delphi dll

有没有办法在dll内的函数中检查参数是否存在(使用Delphi 5)? 我想说我想在MyDll.dll中调用MyFunction(),但我不确定最近添加的参数是否存在。出于向后兼容性原因,这是必需的。

我在这里找到了有用的主题: How to check a DLL if a function exists?

我尝试了它,它对我有用。但是可以扩展它来获取MyFunction()的所有参数吗?

提前致谢。

此致

亚历

1 个答案:

答案 0 :(得分:3)

否 - 从标准Windows DLL无法确定导出函数中使用的参数。您可以使用的唯一信息是函数的名称和/或序号(它们都指向导出函数的第一条指令的.DLL中的入口点。)

如果.DLL是用Microsoft C ++制作的,你可以使用Name Mangling,但是每次更改函数的签名(参数列表和/或返回值)时,这实际上会产生一个新的导出函数,因此消除向后兼容性(函数的参数以编码形式附加到导出的名称,因此 - f.ex. - 导出的函数

void MyFunc(int p1)

将导出为(只是在这里进行说明):

MyFunc@jefal8936

如果您将其更改为

void MyFunc(int p1, char p2)

然后导出的名称可能会突然变为

MyFunc@kaybx42

因此,链接到 MyFunc @ jefal8936 的旧编译程序将无法再找到其入口点(如果与静态链接链接,则无法加载)。

完成您尝试执行的操作的唯一方法是在.DLL中创建一个新的导出函数(一种约定是使用 FuncNameEx 作为带有附加参数的“扩展”版本)和然后你可以从旧的 FuncName 函数调用 FuncNameEx (假设你可以将旧函数的参数“翻译”为新函数)。