读书人

关于名字空间和动态链接库的有关问题

发布时间: 2012-04-12 15:46:35 作者: rapoo

关于名字空间和动态链接库的问题
为预防系统中名字冲突,在动态链接库中进行名字空间约束,如下:

namespace {

__declspec( dllexport ) void print( ) {

std::cout << "hello world!" << std::endl;

}

}

用显示方式( GetProcAddress )调用此动态链接库时,函数名称应该如何填写??

namespace {

extern"C" __declspec( dllexport ) void print( ) {

std::cout << "hello world!" << std::endl;

}

}

按照C风格导出的函数,在显示方式( GetProcAddress )调用时会不会对名字空间有影响呢??


[解决办法]
C里没有namespace,namespace是C++的东西,如果你要用namespace, 就不能用extern "C", 需要在GetProcAddress时输入函数全名,比如?Divide@MyMathFuncs@MathFuncs@@SANNN@Z
[解决办法]
命名空间只会对文件模块有意义,对PE没意义

为了避免DLL导出函数名称更改,使用exterc "c"和.def文件来防止名称更改。最后可以通过dumpbin/depends来查看。

读书人网 >C++

热点推荐