最近做了一些VC++动态链接库的封装,碰到一个问题,在 non-mfc dll模式下,如何实现函数重载,网上查找了一些资料,比较少,经过一番的摸索,终于实现了,分享如下:
1.问题:
要实现
swap(int a,int b);
swap(float a,float b);
两个函数的重载。
2.错误的解决方法:
常规的定义头文件方法如下:
/*testDll.h*/
#ifndef DLL_TESTDLL_H
#define DLL_TESTDLL_H
extern "C" _declspec(dllexport) swap(int a,int b);
extern "C" _declspec(dllexport) swap(float a,float b);
#endif
但是这个编译会报错,因为 extern "C" 修饰的函数,要求标函数按照C语言方式编译和连接,而c语言中,不能实现函数的重载。
3. 正确的解决办法
这时只需将 extern "C" 去掉,是函数以C++方式编译和 连接即可。
/*testDll.h*/
#ifndef DLL_TESTDLL_H
#define DLL_TESTDLL_H
_declspec(dllexport) swap(int a,int b);
_declspec(dllexport) swap(float a,float b);
#endif