为什么一般exe文件不需要进行重定向而dll文件需要?
windows中不是同时有运行很多个进程吗?怎么能保证每个进程都加载到相同的基址比如:0X00400000呢?
windows中不是同时有运行很多个进程吗?怎么能保证每个进程都加载到相同的基址比如:0X00400000呢?
解决方案 »
- GDI的Alphablend函数让底色实现不同的透明度呢???
- WinHttp POST后返回bad request大家帮忙看看是不是代码写错了
- MSCOMM控件串口读取数据时为什么有效数据是8位?
- 谁能给讲一下键盘钩子使用WH_KEYBOARD和WH_KEYBOARD_LL的区别
- MFC VC++中如何实现将Excel表的导入功能 请各位大虾帮帮忙
- CFile.Open(fileName, OpenFlags, CFileException *e);如果出现异常, 会自动throw么? 还是必须自己去判断是否出错,然后throw?
- 为什么两个大数想乘,得到的float数不对呢?
- 对话框中的菜单怎么禁用?
- "::"与api的问题 (分数小了点........不好意思)
- 和尚题-没头(发):编游戏软件赚钱,还是编信息系统软件赚钱,哪个更难?用什么开发软件编更好.
- 我的工程中的DLL是设置为“在共享 DLL 中使用 MFC”,“多线程 DLL (/MD)”,在发布静默安装包的问题?
- splite数据库如何给表设置大点的缓冲区?
但32位的exe只能加载32位的dll,64位exe只能加载64位的dll,因为数据宽度不同,导致系统执行时发生混乱。
因此,exe作为第一载入的,无需关心32位还是64位,但在exe载入系统后,就决定了整个执行流程是32位的还是64位的,并且32位和64位的dll名字一般是一样的,所以在加载dll的时候,就需要重定向到不同目录去获取。windows采用的是虚拟地址空间的技术,程序中一般都是在虚拟地址空间操作。在真正执行时,windows会将虚拟地址映射到真是物理地址。
为了统一,exe 都是 0X00400000
因为每个进程的地址空间是隔离的,同一地址,不代表统一内存。