本文共 628 字,大约阅读时间需要 2 分钟。
如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会对函数名尾附加函数在DLL中的地址。
__declspec(dllexport) __declspec(dllimport)一般使用宏的形式:
#ifdef ONEDLL_EXPORTS#define ONEDLL_API __declspec(dllexport)#else#define ONEDLL_API __declspec(dllimport)#endif
这样在DLL代码本身就是__declspec(dllexport) ,在使用DLL的程序中就变成了__declspec(dllimport),这两个标志分别用来指明当前的函数将被导出还是是被导入的。
如果调用模块和被调用模块都是C++(而且是同一种编程环境,如VC),那么就不需要extern “C”了,
因为这个标志的作用就是用在函数和变量声明前,无论是调用模块,还是被调用模块,都将生成C的修饰符。调用模块需要C修饰符的函数,而被调用模块则生成C修饰符的函数,
所以这个标志在两者都是C++的时候使用并不受影响。但是如果C模块要调用C++ 模块,那么C++模块就需要使用extern “C”
参考:
转载地址:http://pkiii.baihongyu.com/