我确实有三个dll。


a.dll-多年前发布
b.dll-发布不是很多年
c.dll-即将发布


每个都包含相同的功能-不幸的是具有不同的参数。
所以我有以下方法

aMethod(param1)
aMethod(param1, param2)
aMethod(param1, param2, param3)


我的任务是制作一个向后兼容的新dll(或新dll)。
但是据我从Google那里了解到的,不可能在dll中重载方法。

有谁提示我如何优雅地解决这个问题?

最佳答案

您可以在DLL中重载函数签名。但是,从DLL导出的函数名称必须唯一-这是Windows要求,而不是Delphi要求。因此,在Delphi中将函数声明为重载,但请确保使用定义的特定唯一名称导出它们。从新的多合一DLL导入的客户端将需要使用您定义的那些唯一名称进行导入。

Delphi中的默认行为是,导出的函数通过函数的名称导出,即简单明了。如果要执行重载,则需要更多地参与并自己定义导出名称。

但是请注意,这不会产生可放入期望a.dll的较旧应用程序中的DLL。该解决方案对于源是向后兼容的,但对于二进制文件则不是向后兼容的。

您很可能将无法创建与过去的所有三个DLL版本二进制兼容的新DLL,因为旧的exe二进制文件引用的是相同的函数名称,但预期行为不同(不同的参数列表)。

还要注意,如果您的三个dll版本实际上具有不同的文件名(a,b,c),那么这有点不切实际-静态函数绑定绑定到dll名称+函数名称。如果希望新的DLL与旧的exe一起使用,是否打算将新的dll复制3次到文件名a,b和c?这似乎很奇怪,适得其反。与熟睡的狗一样,让旧的DLL说谎。除非绝对必须修复一些严重的错误,否则请别管它们。

07-25 23:45
查看更多