给你一个例子: 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;
有三种方法, 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; 书上以这种情况讲得最多,
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;
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;
书上以这种情况讲得最多,
用函数的时候和内部函数无分别,是不是很COOL????,