动态链接库DLL同静态Lib链接的区别在于:程序在编译成可执行文件时会把静态链接库中的程序拷进可执行文件中,所以Lib文件是不用同可执行 文件一同发布的。而链接到动态库DLL中时要通过一个Lib文件,Lib文件保存了函数或类在DLL中的入口地址,可执行文件中相应存放的也是函数地址, 所以DLL和Lib要同可执行文件一起发布。
1. VC中支持的DLL种类:Non MFC DLL,Regular DLL,Exetension DLL
Non MFC DLL 非MFC动态链接库:不使用MFC类库结构,直接用C写,输出函数用标准C接口,能被非MFC程序调用
Regular DLL 正则动态链接库:使用MFC编写,源文件中有继承自CWinApp的类,只能被MFC调用;正则Dll又分成静态连接到MFC的和动态链接到MFC的,在创建时会看到。
Extension DLL 扩展动态链接库:实现从MFC继承下来的新类,输出MFC新子类,只能被MFC调用
2.实例如下:(VC++6.0)
在新建菜单中选择新建工程Win32 Dynamic Link Library,选择任何一种都可以,我以empty project为例,加入自己的函数MyFunction:
编译后即可生成DLL文件和相应的Lib文件
调用DLL的方法:显式调用 隐式调用
显调:用LoadLibrary或AfxLoadLibrary显式调入Dll,再用GetProcAddress引入函数,最后用FreeLibrary或AfxFreeLibrary(参数是AfxLoadLibrary返回的句柄)释放Dll
隐调:需要加入动态链接库Lib文件,不需要调用LoadLibrayr或AfxLoadLibrary
在同一个工作区中,添加一个testdll工程,建立一个控制台的程序做的测试。。
测试代码如上所写。
设置testdll工程为当前活动工程,在mydll工程的函数里面,添加一个断点F9,
在调试时,就能进入到dll中单步跟踪了!
以上内容如有不懂,可以留言!中间如果有错欢迎大家指出来!