C风格的DLL导出函数的典型方法说到底,DLL是对应C语言的动态链接技术,在输出C函数和变量时显得方便快捷
所以写DLL文件最典型的一种Case:不用C++的类而都是C风格的代码
这种情况要导出函数,有两种方式:
第一种:函数前加相应修饰符
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
然后在每一个要导出的函数前面加EXPORT
EXPORT标识符包括储存方式限定词__declspec(dllexport)以及在表头文件按C++模式编译时附加的「C」。因为C++编译器会将函数的名字改变,从而导致导出函数名称变化,用extern "C"就是为了防止这个。C编译器无此问题。
第二种:用def文件
LIBRARY MyDll
EXPORTS
Max
Min
其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。
所以写DLL文件最典型的一种Case:不用C++的类而都是C风格的代码
这种情况要导出函数,有两种方式:
第一种:函数前加相应修饰符
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
然后在每一个要导出的函数前面加EXPORT
EXPORT标识符包括储存方式限定词__declspec(dllexport)以及在表头文件按C++模式编译时附加的「C」。因为C++编译器会将函数的名字改变,从而导致导出函数名称变化,用extern "C"就是为了防止这个。C编译器无此问题。
第二种:用def文件
LIBRARY MyDll
EXPORTS
Max
Min
其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。