DLL和EXE的配合

本文介绍了DLL的使用目的及其具体方法,包括如何通过调用LoadLibrary和GetProcAddress实现DLL加载与函数调用,以及如何在DLL与EXE间传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   关于上个项目中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把这两个对象保存下来, 就可以调用这两个对象的函数或成员了.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值