一个问题:
主程序与DLL的关系(属于不同进程,还是属于同一进程的不同线程,还是其他?)
主程序与DLL的关系(属于不同进程,还是属于同一进程的不同线程,还是其他?)
解决方案 »
- 为什么在ACCESS中按日期查询总是错误?
- 关于F1Book的行宽改变的问题
- delphi怎样实现这样的文件复制?[悬赏50分]
- 有什么命令可以清除dbgrid里的数据,让dbgrid 回到初始状态
- 初学者的问题!恳请帮忙!
- 天啊~~!为什么在intraweb中用adodataset添加文件到数据库中时,文件的大小只能<=32k:(
- 哪位高手请帮我看看下面的快速排序算法的源码,错误提示为:堆栈溢出。有正确的源码,请贴一份。验证通过即送100分,不够再加。
- 一个关于文件更新的问题?
- 关于多页面浏览器(附源代码)的问题
- 如何在Delphi2005中编写代码使TEdit组件中只能输入0到9这些数字?
- 程序运行时如何固定TFORM的大小
- 判断加班问题?请兄台帮帮小妹……
user32.dll中的代码也可以在不同的线程中执行exe和dll都是运行的代码而已(当然也包括资源、静态数据等),一个exe也可以启动多次,产生多个进程。
至于多线程,跟dll没啥关系.
可是从DLL向主程序发消息为什么就不成功,老是要用BroadcastSystemMessage()才能发,为什么呢?
发送消息可以用SendMessage和PostMessage发送给窗体,或者用PostThreadMessage发送给线程。
你发送不成功的原因大概是窗体的句柄参数不对,或者窗体的消息映射方法没写对。
2、2楼的说法我个人认为是错误的,不同的进程调用相同DLL,不是只有一份。
3、DLL向程序(包括它的程序)发送消息是不会出问题的,正如5楼所说。
Dll注入就是让目标进程主动装载目标dll,目的就是为了可以在同一个地址空间执行自己想要执行的代码。
2、2楼的说法我个人认为是错误的,不同的进程调用相同DLL,不是只有一份。
dll装载用的是内存文件映射,不同的进程装载dll的时候会映射到同一个文件,只是映射到的虚地址可能不同而已,因为是虚模式寻址,所以看起来好像的进程隔离一样。只有当用WriteProcessMemory来更改这些数据的时候,系统为了保持进程的独立性,就会把该模块拷贝一份,作为该进程的专用(因为其中数据被修改了,无法共享了)。
3、DLL向程序(包括它的程序)发送消息是不会出问题的,正如5楼所说。