二者除了在具体的代码上不一样外,在调用机制上有什么区别呢?
如果dll版本发生变化,哪一种方式的客户程序需要重新编译?
谢谢

解决方案 »

  1.   

    一种是静态调用和一种是动态调用,两种都不用重新编译,只要你的DLL接口保持一直就可以了
      

  2.   

    是不是静态调用的dll文件必须放在客户程序的目录中,而动态调用的dll文件就无所谓了,可以用loadlibrary来搞定?除此之外,二者还有什么区别吗?请指正
      

  3.   

    其实dll文件不论动态调用还是静态调用,文件放哪儿都无所谓了,关键是windows能找到就行,个人认为区别在于dll加载的时机,使用上并没有什么不同
      

  4.   

    装载时调用,windows怎么能自动找到dll呢?
    还有装载时和运行时有什么区别呢?谢谢
      

  5.   

    主要的区别在这里呀:
         静态dll在你的应用程序装载到内存时你的dll也就装到的内存,占用了内存空间,也就是在没有用到dll时,dll也占着内存空间,是不是有一点浪费呀?
        动态dll调用是在你用到时才临时装到内存,用完之后马上就释放了所占的资源,当然也取决你对dll的装入,
      

  6.   

    再问:两种方式对dll文件的所在目录有特别的要求吗?
    好像动态dll调用可以通过LoadLibrary(Path)来找到dll文件,那么静态的呢?是不是必须与客户程序放在同一目录呢?谢谢
      

  7.   

    景泰调用的时候,一般会在EXE当前目录和系统目录寻找;
    动态调用就可以由loadlibrary 的参数搞定了
      

  8.   

    目录:如果没有写绝对路径的话:
    大概是以下顺序:
    0. 你指定的目录;
    1. 程序所在目录;
    2. windows核心目录,比如nt下的system32;以及
      

  9.   

    目录:如果没有写绝对路径的话(visual studio那个烂烂的VB api浏览器就这个德行):
    大概是以下顺序:
    0. 你指定的目录;(好比程序所在文件夹\DLLS\)
    1. 程序所在目录;
    2. windows核心目录,比如nt下的system32;以及其它次核心目录比如c盘根目录, winnt目录等等;
    3. windows的路径所列出的;好比delphi的bin目录或者visual studio的bin目录;p.s.刚才输入法坏掉乱敲了键。
      

  10.   

    lianshaohua(连少华) 说的对。
    ------------------------------------------------
    好像动态dll调用可以通过LoadLibrary(Path)来找到dll文件,那么静态的呢?是不是必须与客户程序放在同一目录呢?
    ----------对所在目录没有要求
      

  11.   

    先谢谢ma7ht(飞天马)这位老兄了!!
    静态的也没有必要和客户程序放在同一目录下,你可以把动态链接库放在任一的目录下,在implementation部分:
    function函数名(形式参数列表):返回值类型;external'路径+动态链接库名';
    //即把动态链接库的函数声明为Application的外部函数.以后每当你用到这个声明的函数时,就像用Delphi自己的函数一样会出现提示的.
      不过通常情况下,一般把动态链接库放在当前目录中,以方便调用!