windows下的动态库
一、导入导出符号
ELF中默认导出所有的全局符号,Windows中需要使用“__deslcpec(dllexport)”修饰某个函数或者变量表示导出该函数或者变量,“__deslcpec(dllimport)”表示导入该函数或者变量。也可以使用.def文件来声明导入导出符号。
二、运行时链接
Windows同样支持运行时链接,提供了3个API函数:
LoadLibrary(LoadLiraryEx)加载DLL到进程地址空间,和ELF的dlopen类似。
GetProcAddress查找某个符号的地址,和ELF的dlsym类似。
FreeLibrary卸载某个已加载的模块,和ELF的dlclose类似。
三、关于C++动态链接的问题
1、如果重新增加了某个对象类的成员变量需要重新变量整个工程,否则会照成可执行文件调用是初始化的对象还是缺少新增成员变量的对象,对于新增成员变量的访问都会出现异常。
2、所有全局函数都应该使用“extern "C”"来防止不同的编译器修饰方法的不同。
3、导出函数都应该使用__stdcall调用规范。
4、不要在DLL里面申请内存外面释放,反之亦然。