gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:54:04 25 4
gpt4 key购买 nike

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

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

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

提前致谢。

问候,

亚历克斯

最佳答案

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

如果 .DLL 是用 Microsoft C++ 编写的,则可以使用名称修改,但这本质上会在每次更改函数的签名(参数列表和/或返回值)时创建一个新的导出函数,从而将消除向后兼容性(函数的参数以编码形式附加到导出的名称中,以便 - f.ex. - 导出的函数

void MyFunc(int p1)

将导出为(只是为了说明而在这里制作):

MyFunc@jefal8936

如果你将其更改为

void MyFunc(int p1, char p2)

那么导出的名称可能会突然变成

MyFunc@kaybx42

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

完成您尝试做的事情的唯一方法是在 .DLL 中创建一个新的导出函数(一种约定是使用 FuncNameEx 作为带有附加参数的“扩展”版本)并且那么您可以从旧的 FuncName 函数中调用 FuncNameEx (假设您可以将旧函数的参数“转换”为新函数)。

关于delphi - 检查 dll 函数中的参数是否存在 (Delphi 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com