有关动态链接 DLL的小问题。

feeldead 2002-08-10 07:04:17
windows中,dll可以动态链接,也可以静态链接。请问这两种方式有什么不同?谢谢。
...全文
29 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feeldead 2002-08-12
  • 打赏
  • 举报
回复
哎呀,谢谢,谢谢。
不过还有一点问题,MFC的静态库,和MFC的动态库有什么主要的不同吗?
feeldead 2002-08-11
  • 打赏
  • 举报
回复
msdn 上提到的 Link implicitly 和 Link explicitly 和在VC中选择 静态连接库 or 动态连接库 有什么关系呢?
feeldead 2002-08-11
  • 打赏
  • 举报
回复
谢谢。
dycdyc123 2002-08-11
  • 打赏
  • 举报
回复
还有什么问题?
In355Hz 2002-08-11
  • 打赏
  • 举报
回复
我想可能有些概念容易混淆:
一般指DLL是动态或静态装载的,就是指DLL文件Image被何时装入进程的地址空间。

静态装载就是Link implicitly(隐式加载),是指该DLL存在于可执行文件的输入节中,在应用程序启动时加载,当进入WinMain时,这些DLL都装载好了。

动态装载就是Link explicitly(显式加载),专指并不包括在可执行文件的输入节中,用LoadLibrary(Ex)加载的DLL。它的Image在LoadLibrary(Ex)被调用时装载。

现在还有一种Delay Load(延迟加载)技术,指的是该DLL在可执行文件的输入节中被注明是延迟加载的。在应用程序启动时,该DLL的Image并不装载进入进程地址空间,而是在第一次调用DLL函数的时候装载。

至于VC中选择动态连结/静态连结(注意是连结),是指编译连结时,程序与哪种MFC库连结,静态连结连结到MFC的静态库(Static Library) nafxcw*.lib,动态连结通过mfc42*.lib连结到MFC的DLL, 这个属于隐式加载。
andy_lau 2002-08-11
  • 打赏
  • 举报
回复
可以得
andy_lau 2002-08-11
  • 打赏
  • 举报
回复
共享dll时,路径你已经事先设定好了。程序运行直接loadlibrary
feeldead 2002-08-10
  • 打赏
  • 举报
回复
那么,如果要共享dll,是不是就不能用静态链接了?
akiy 2002-08-10
  • 打赏
  • 举报
回复
是什么样的动态连接在动态连接编写的时候就已经确定了,因为你用到的静态的动态连接在编译的时候已经把名字编译在程序中了,所以会直接找到不用扫描!
feeldead 2002-08-10
  • 打赏
  • 举报
回复
to :joyu(佳友)
谢谢,不过还有一点问题。:)
如果是静态链接,是不是装载程序在被装载程序开始运行之前,先扫描整个程序代码,看其中调用了那些dll,然后将用到的dll装入内存;还是在可执行程序的头部记录着本程序用到的dll;或者是其他。另外,如果要共享dll,是不是只能动态链接?
joyu 2002-08-10
  • 打赏
  • 举报
回复
动态链接就是,程序调用dll库中的函数时才配装入到内存中;而静态链接就是程序一启动就把整个dll装入到内存中。

16,550

社区成员

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

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

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