{***********************************
* Author: sun *
* DateTime: 2006/10/13 *
* Purpose: Load DllFile *
* Result DllProc *
* UnitName: UntDllImport *
*********************************** }
unit untRFDllImport;
interface
uses Windows, SysUtils, Dialogs;
type
TDllTransfer = class
private
FDllFileName: TFileName;
FHandle: THandle;
procedure SetDllFileName(const Value: TFileName);
function GetDllFileName: TFileName;
function GetDllProc(SProcName: String): Pointer;
procedure DllFree;
public
property DllFileName:TFileName read GetDllFileName write SetDllFileName;
property DllProc[SProcName: String]: Pointer read GetDllProc;
constructor Create;virtual;
destructor Destroy;override;
end;
implementation
{ TDllTransfer }
constructor TDllTransfer.Create;
begin
FDllFileName := '';
FHandle := 0;
end;
destructor TDllTransfer.Destroy;
begin
DllFree;
inherited;
end;
procedure TDllTransfer.DllFree;
begin
if FHandle <> 0 then
begin
FreeLibrary(FHandle);
FHandle := 0;
end;
end;
function TDllTransfer.GetDllFileName: TFileName;
begin
Result := FDllFileName;
end;
function TDllTransfer.GetDllProc(SProcName: String): Pointer;
begin
try
if FHandle = 0 then
begin
Result := nil;
Exit;
end else
Result := GetProcAddress(FHandle,PChar(SProcName));
finally
end;
end;
procedure TDllTransfer.SetDllFileName(const Value: TFileName);
begin
if FDllFileName <> '' then
DllFree;
FDllFileName := Value;
if not FileExists(Value) then
raise Exception.Create(Format('%s 动态库文件调用错误!',[Value]));
FHandle := LoadLibrary(PChar(FDllFileName));
end;
end.
加载dll的类
最新推荐文章于 2022-07-25 21:15:35 发布