关于上个项目中DLL使用方法的总结:
使用dll的目的: 1 将来需要更改某些功能的时候只需要更改DLL即可, 而不用让用户更改他的EXE.
2 可以节省空间, 在需要该DLL的时候可以调用loadlibrary把它载入, 不需要的时候调用freelibrary将空间释放.
具体方法:
在MENU.DLL中写了一个全局函数initialize(*para), 还有两个类,并且创建这两个类的两个全局对象.
在EXE初始化时候, 调用loadlibrary("MENU.DLL")将DLL载入地址空间, 这个时候系统会调用DLL 的DLLMAIN()函数.虽然我们的DLL中
并没有写这个函数, 但在这种情况下,系统会为我们生成一个默认的DLLMAIN(). 载入后,调用getprocaddress("initialize")获得DLL中initialize
函数的地址, 根据这个函数的地址就可以调用这个函数了,(具体方法在MSDN中查找loadlibrary就可得到详细信息及用法). 在调用的时候把EXE中一个指针传进去, 在DLL中写代码的时候就可以使用这个指针来操作EXE中的函数或者数据了,就像是在EXE中编码一样. 要理解这一点就需要理解进程的地址空间的问题,DLL和EXE是运行在同一个4G的地址空间中的.
DLL在initialize中得到了一个EXE中的指针,这样他可以操作EXE中的东西. 那EXE如何使用DLL中的两个类呢?
在DLL中创建了两个类的全局对象, DLL调用一个EXE中的函数,并把这两个对象的地址传过去. 这样EXE把这两个对象保存下来, 就可以调用这两个对象的函数或成员了.