DLL中如何实现重载函数的输出

fzbnet 2012-07-09 10:57:13
DLL代码:
int WINAPI Add(int x, int y) {return x+y;}
int WINAPI Add(float x, float y) {return x+y;}
Def文件:
Add @1

会导致编译错误。

由于项目需要,必须让两种不同的用户来使用我的动态库(一种int用户,另一种float用户)。

请教:如何在DLL的输出中,实现重载函数Add()的输出?请高手指点,谢谢!
...全文
389 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
s哒c 2014-05-23
  • 打赏
  • 举报
回复
遇到了同样的问题,求解决……
fzbnet 2012-07-13
  • 打赏
  • 举报
回复
呵呵,虽然我们在学习和工作中竭力避免各种不合适的设计;
但实际项目中的历史遗留问题,终究还是需要人去解决的。^_^
fzbnet 2012-07-09
  • 打赏
  • 举报
回复
感谢楼上各位的帮助!

项目实际情况是:
Dll_1里有函数:int WINAPI Add(int x, int y) {return x+y;}
Dll_2里有函数:int WINAPI Add(float x, float y) {return x+y;}

为了整合这两个Dll,方便以后统一维护,我需要在新的Dll中同时支持两个原有的Add();
(注:1、Dll_1和Dll_2同名;2、已有两种客户在调用Add()函数;3、让客户修改自己的代码不现实)

我目前能想到的方法:
第一步:以重载的方式实现Add()(C++支持重载,所以这一步很容易);
第二步:输出(被卡在这里了!)(由于客户不可能修改各自的代码,我不能以Add_1()、Add_2()的方式提供)。

再次恳求帮助!
hdg3707 2012-07-09
  • 打赏
  • 举报
回复
或者你也可以这样,加上参数类型选择:
int WINAPI Add(float x, float y,bool IsInt)
{
if(IsInt)
return ((int)x+(int)y);
else
return x+y;
}
实际上你的两个函数返回的都是int,因此,完全可以就定义成一个参数是float的
hdg3707 2012-07-09
  • 打赏
  • 举报
回复
改成这样试试:
float WINAPI Add(float x, float y) {return x+y;}
如果还不行,你就定义成一个类,在类里加上这两个函数,这样或许可以.
dahaiI0 2012-07-09
  • 打赏
  • 举报
回复
貌似可以在def文件里使用不同的名字。具体语法也不清楚没用过
zhanshen2891 2012-07-09
  • 打赏
  • 举报
回复
导出类可能可以,我也没这么干过,你可以测试一下。
Saleayas 2012-07-09
  • 打赏
  • 举报
回复
编程理念不对!
fzbnet 2012-07-09
  • 打赏
  • 举报
回复
在Dll中输出重载函数的根本原因:
1、已经有很多客户在使用两种不同参数的Add()函数;
2、让这些客户去修改自己的代码是不现实的。
因此,Dll的名字和Add()函数的名字,都不可以改变(简单地说,就是Dll的开发接口必须兼容,不能被修改)。

而导出类或另定义函数,等于要修改Dll的二次开发接口。。。
ouyh12345 2012-07-09
  • 打赏
  • 举报
回复
导出类吧
另外,如果需要重载的函数不多,另定义几个函数也是可以的
fzbnet 2012-07-09
  • 打赏
  • 举报
回复
实在不行,我只能用条件编译的方式来间接实现;
但这么一来,Dll的维护就麻烦了:每次更新,都得发布两个版本(面向两种用户)。。。
oyljerry 2012-07-09
  • 打赏
  • 举报
回复
这个好像没有更好的办法了,既然更新DLL了,就需要调用者也同步代码。而DLL又不支持导出重载

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧