有没有办法在dll内的函数中检查参数是否存在(使用Delphi 5)? 我想说我想在MyDll.dll中调用MyFunction(),但我不确定最近添加的参数是否存在。出于向后兼容性原因,这是必需的。
我在这里找到了有用的主题: How to check a DLL if a function exists?
我尝试了它,它对我有用。但是可以扩展它来获取MyFunction()的所有参数吗?
提前致谢。
此致
亚历
答案 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 (假设你可以将旧函数的参数“翻译”为新函数)。