社区
Delphi
帖子详情
Dll中的函数重载处理
ymxxm
2000-07-17 12:36:00
请高手指点:如何在Dll中重载函数(需要导出同名函数)
...全文
287
3
打赏
收藏
Dll中的函数重载处理
请高手指点:如何在Dll中重载函数(需要导出同名函数)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
JGTM2000
2000-07-17
打赏
举报
回复
导出同名函数是不可能的。否则就不会有mangled name了(见过C++输出的函数名吧?)。
Michaelyfj提到的overload是可以对名称相同但参数表不同的函数进行重载,但是在输出的时候,虽然有相同的名称编译器并不会报错,但是在实际引入时无法确定调用的到底是哪一个,因此显然将导致无法预测的堆栈错误。
怎么办?在exports时候为函数的不同版本明确指定不同名称即可。如下:
library BeepLib;
uses
Windows, SysUtils;
procedure Beep(seed: PWideChar); overload; stdcall;
begin
Windows.Beep(StrToIntDef(seed),0),1000);
end;
procedure Beep(seed: PChar); overload; stdcall;
begin
Windows.Beep(StrToIntDef(seed,0),1000);
end;
exports
Beep(seed: PWideChar) name 'BeepW',
Beep(seed: PChar) name 'BeepA';
end.
在调用时引入的时候同样附上name属性即可:
project TestOverload;
procedure Beep(freq: PWideChar); stdcall;
external 'BeepLib.dll' name 'BeepW'; overload;
procedure Beep(freq: PChar); stdcall;
external 'BeepLib.dll' name 'BeepA'; overload;
begin
Beep(StrToOleStr('10000'));
Beep(PChar('5000'));
end.
相信有更好的办法解决你的实际需求。
gsoft
2000-07-17
打赏
举报
回复
关注
Michaelyfj
2000-07-17
打赏
举报
回复
用保留字overload可实现dll重载,要具体例子请与我联系
e-mail:yfj321@163.net
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章