用VC向导生成动态库工程时,输出中可能出现如下三种情况:
1、只有lib文件;
2、只有dll文件;
3、同时有上述两种文件。
如果是第一种,应该是静态库,如果是第二种,应该是“纯种”的动态库,如果是第三种哪?还有这几种库加载方式有何区别?
1、只有lib文件;
2、只有dll文件;
3、同时有上述两种文件。
如果是第一种,应该是静态库,如果是第二种,应该是“纯种”的动态库,如果是第三种哪?还有这几种库加载方式有何区别?
同时生成.lib和.dll,那么lib是dll的导入库,提供链接时需要的符号再说加载方式...
静态库.lib是不需要(运行时)加载的,因为代码已经在链接时合到目标可执行文件去了
第二种 -- if it does exist...就要(运行时)动态加载了, LoadLibrary
第三种,"一般"是(运行时)静态加载,即在程序启动时由系统帮你LoadLibrary, 退出时FreeLibrary
只不过要注意导出的符号名就是了
链接时只是相当于把dll中的符号和位置告诉目标代码,dll本身一样是运行时加载系统自动加载以后dll已经map到你的空间了,所以是不用加载, 但是你一样可以使用LoadLibrary得到这个dll的句柄,这个时候跟调用GetModuleHandle是一样的,不同之处在于LoadLibrary调用之后要FreeLibrary一下,给referrence count减1
但是要注意如果是LoadLibraryEx带DONT_RESOLVE_DLL_REFERENCES参数的话是不会调用你的DllMain的