先用LoadLibrary将dll加载
然后用 GetProcAddress得到要调用的函数地址,并赋值给一个函数指针
最后用FreeLibrary释放dll

解决方案 »

  1.   

    给你一个例子:
    var
      H: HWnd;
      p: procedure(Handle: THandle; Path: PChar); stdcall;
    begin
            H := LoadLibrary(PChar('shdocvw.dll'));
            if H <> 0 then
              begin
                p := GetProcAddress(H, PChar('DoOrganizeFavDlg'));
                if Assigned(p) then p(Application.Handle, PChar(favpath));
              end;
          FreeLibrary(h); 
    end;
      

  2.   

    有三种方法,
    1 用名字,(静态)
    procedure importbyname ;External 'youlib.dll'
    2 用索引号
    procedure importbyIndex;Externa 'youlib.dll'
    3 用loadlibrary 和getprocaddress(动态)好处是失败后EXE不用停啦
    但是比较麻烦
    又得用原型,又得FREE
    var
      H: HWnd;
      p: procedure(Handle: THandle; Path: PChar); stdcall;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~和DLL的函数型要一样,
    begin
            H := LoadLibrary(PChar('shdocvw.dll'));
            if H <> 0 then////0不行,要>=32才行,32以前是各种异常情况
              begin
                p := GetProcAddress(H, PChar('DoOrganizeFavDlg'));
                if Assigned(p) then p(Application.Handle, PChar(favpath));
              end;
          FreeLibrary(h); 
    end;
     书上以这种情况讲得最多,
      

  3.   

    1和2种情况,
    用函数的时候和内部函数无分别,是不是很COOL????,