关于DLL加载的问题

coppermine 2003-08-07 01:07:00
初学DLL,很多概念不清晰. 一个问题就是:当DLL被加载之后,DLL是作为一个线程存在的吗?或者是作为加载该DLL的线程的一部分存在的?
特别是对于MFC DLL,里面有一个CWinApp全局实例,而CWinApp又是由CWinThread继承而来的,加载这样的DLL后,DLL是否是作为一个线程存在?

另外,程序中只能有一个CWinApp实例,但如果是一个使用了MFC DLL的MFC程序,则可能有多个CWinApp实例,该如何解释?
...全文
126 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ejiue 2003-09-06
  • 打赏
  • 举报
回复
mark,收获
andrew_var 2003-08-08
  • 打赏
  • 举报
回复
不会吧,各位兄台,居然复制我的发言。就算是引用,也要注明出处嘛,否则要算是剽窃呢;p

总结一下:
DLL是静态的,是内存中的模块,并没有运行的概念。
线程是动态的,一个线程可以运行多个DLL模块中的代码、访问其中的数据。
sunjianchang 2003-08-08
  • 打赏
  • 举报
回复
请大家帮个忙,如何才能把一个ip地址挂两个域名。www.e5135.com sunjian@wang168.net
jiajie828 2003-08-08
  • 打赏
  • 举报
回复
记录
Ah 2003-08-08
  • 打赏
  • 举报
回复
DLL只是一个程序模块,所谓的DLL被加载,是指DLL的代码段等等被映射到加载它的Process的进程空间里。
调用FreeLibrary()释放加载的模块

2.进程退出时,Windows2000会自动卸载该进程的所有的DLL,但是windows 95好像不行。

另外它是在进程的内存空间中运行的
xiaohedou 2003-08-08
  • 打赏
  • 举报
回复
看来你的问题应该是DLL与线程!如果这个DLL是个COM组件,由于组件的特点,都有新线程产生;如果是纯资源DLL,关键要看是谁加载它;DLL并不绝对是静态的.
mfkzj 2003-08-07
  • 打赏
  • 举报
回复
DLL只是一个程序模块,所谓的DLL被加载,是指DLL的代码段等等被映射到加载它的Process的进程空间里。
DLL的加载跟线程没有关系。一个很明显的例子就是纯资源动态连接库就不含有任何线程方面的冬冬 只是为了减少应用程序的大小和将被多个进程调用的资源调入到内存中
自己显式调用FreeLibrary()
2.进程退出,Windows自动卸载该进程的所有的DLL
它是作为进程的一部分 在进程调用的时候被调入内存然后可以供多个进程调用 在进程结束的时候会释放调自己调用的不被其他进程调用的DLL

patricklee01 2003-08-07
  • 打赏
  • 举报
回复
DLL只是一个程序模块,所谓的DLL被加载,是指DLL的代码段被映射到加载它的Process的进程空间里.並不是甚麼线程
andrew_var 2003-08-07
  • 打赏
  • 举报
回复
卸载DLL有两种可能:
1.自己显式调用FreeLibrary()
2.进程退出,Windows自动卸载该进程的所有的DLL
FAICHEN 2003-08-07
  • 打赏
  • 举报
回复
进程的一部分
DDHuang 2003-08-07
  • 打赏
  • 举报
回复
各位大哥,借个地方问问,dll被加载后什么时候会被卸载??
andrew_var 2003-08-07
  • 打赏
  • 举报
回复
DLL只是一个程序模块,所谓的DLL被加载,是指DLL的代码段等等被映射到加载它的Process的进程空间里。
DLL的加载跟线程没有关系。
你是用Visual Studio的MFC 向导来做的DLL吧,它里面的CWinApp的主要作用是来初始化DLL模块。
至于到底是哪个线程来执行DLL中的代码,可以自己控制。
han_wei 2003-08-07
  • 打赏
  • 举报
回复
dll作为加载线程的一部分存在。如果MFC DLL中有个cwinapp对象同时加载程序中也有一个的话,那么在dll的导出函数中加AFX_MANAGER_STATE宏(具体查一下msdn文档)
LocalVar 2003-08-07
  • 打赏
  • 举报
回复
dll是作为加载线程的一部分运行的,多个CWinApp并没有影响,只要不执行它的Run函数就行了,就不会多出一个县城来

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧