[ZT]DLL导出函数中有namespace时的用法

DLL中可以导出很多用户自定义的函数、类型、全局变量等。但是,我们有必要注意到这样的一种情形:我们写的DLL中有一些函数,能满足我们的需要,同时,我们也需要用到其他人写的DLL,但是不幸的是,这两个DLL中有同名的函数。尽管你可能还没碰到这样的情形,但是你可能要开始留意这个问题了,那么有什么好的办法来避免吗?


我们可以使用namespace , namespace能将用户自定义的类型、变量、函数等全部归类到一起,当我们调用函数遇到冲突的时候,我们就可以显式地指定调用某个namespace中的这个函数。如 MyNameSpace::MyFunction();
现在我们的任务是:在普通DLL的基础上,进行更改,以便支持namespace 。
首先,我们需要在H文件的导出声明中添加 namespace MySpace{},并将所有要导出的函数都放在{}中。试试编译你的程序,你可能会发现,编译无法通过,提示的是很多函数都是未声明的了,为什么会这样?答案是:要调用namespace中的资源,必须先将namespace引用。引用方法:using namespace MySpace;
这时,你再编译,恭喜你,通过了!但是,你用 VC6自带的Dependence 打开这个DLL,你会发现在导出函数列表中没有任何函数了,换句话说,这个DLL没导出函数了。为什么呢?同样是语法问题:我们对这些导出函数进行实现的时候,需要进行一些改变,改成类似于C++类的函数声明方式。如函数 void MyFunction(), 应该这样写实现:
void MySpace::MyFuntion(){}

博主友情提示:

如在您的评论中需要提及如QQ号、微信号、电子邮件地址或其他隐私敏感信息,欢迎通过>>博主专用加密工具v2<<加密后发布,原文只有博主可以看到。