请问如何动态调用DLL中的函数(100分)

  • 主题发起人 主题发起人 wengyz
  • 开始时间 开始时间
W

wengyz

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中要根据98和NT的不同要调用不同DLL中的方法,现在我已经分出98和NT了,
却不知道怎么动态调用不同DLL
 
用LoadLibrary('your library name')吧
 
举个例子:
procedure TForm1.Button1Click(Sender: TObject);
var
; buffer:pchar;
; h : HInst;
; fn : function (lpBuffer: PChar; uSize: UINT): UINT; stdcall;
; fs:LPCSTR;
begin

h:=LoadLibrary('kernel32.dll');
if h=0 then
; begin
; ; showMessage('load library error!');
; ; exit;
; end;
@fn := GetProcAddress(h,Pchar('GetWindowsDirectoryA'));
if @fn=nil then
; begin
; ; showMessage('get proc address error!');
; ; freelibrary(h);
; ; exit;
; end;
getmem(buffer,260);
fn(buffer,260);
freelibrary(h);
caption:=buffer;

end;
 
TOpenCom=Function(com:integer):Integer;stdcall;

Var
; OpenCom:TOpenCom;
begin
;LibHandle:=LoadLibrary('Icdll32.dll');
;If LibHandle<=0 then
;Raise Exception.Create('{LoadLibrary Faile] GetLastError reports:'+
; ; ; ; ; ; ; ; Inttostr(GetLastError));
;@OpenCom:=GetProcAddress(LibHandle,'OpenCom');
;If OpenCom(ComNu)<>0 Then
; ;Begin
; ; ;Showmessage('端口无法打开!');
; ; ;Err_BJ;
; ; end;
 
多人接受答案了。
 
后退
顶部