社区
进程/线程/DLL
帖子详情
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
打赏
收藏
DLL中如何实现重载函数的输出
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()的输出?请高手指点,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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又不支持导出重载
java源码包---java 源码 大量 实例
5个目标文件,演示Address EJB的
实现
,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()
函数
返回一个经过初始化的上下文,用client的getHome()
函数
调用Home接口...
C\C++
DLL
调用(
dll
函数
重载
未解决)
fun.h, 定义需要给外部调用的
函数
#pragma once #include<string> #include<iostream> #define FUN_API _declspec(
dll
export) EXTERN_C FUN_API int fun1(int a, int &b, ...
DLL
函数
重载
,以及一些前提知识的整理~
__stdcall, __cdecl, extern "C"等一些知识整理下~网上也有不少前辈的精彩文章整理一下放在最下面~
dll
会随附生成一个lib,里面存的是
函数
名什么的,那么可以从他身上下手所以就不必委曲求全的去extern "C"了。...
c++
函数
重载
详解
先是简单理解下
函数
重载
的概念:同一域内的同名
函数
在
函数
参数类型,参数个数,参数顺序上具有不同,则互为
重载
。 ps:
函数
重载
不包括
函数
返回值类型哟. 然后就是揭开一些c++的迷雾: 常成员
函数
的
重载
: class...
在C++
中
调用
DLL
中
的
函数
应用程序使用
DLL
可以采用两种方式:一种...在使用
DLL
之前首先要知道
DLL
中
函数
的结构信息。Visual C++6.0(或者更先进的版本)在VC\bin目录下提供了一个名为Dumpbin.exe的小程序(使用方法见VS自带工具:dumpbin
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章