|
@@ -37,32 +37,105 @@ const
|
|
uses
|
|
uses
|
|
DosCalls;
|
|
DosCalls;
|
|
|
|
|
|
|
|
+threadvar
|
|
|
|
+ DynLibErrNo: cardinal;
|
|
|
|
+ DynLibErrPath: array [0..259] of char;
|
|
|
|
+
|
|
function LoadLibrary (const Name: AnsiString): TLibHandle;
|
|
function LoadLibrary (const Name: AnsiString): TLibHandle;
|
|
var
|
|
var
|
|
- ErrPath: array [0..259] of char;
|
|
|
|
Handle: longint;
|
|
Handle: longint;
|
|
begin
|
|
begin
|
|
- if DosLoadModule (@ErrPath, SizeOf (ErrPath), PChar (Name), Handle) = 0
|
|
|
|
- then Result := Handle else Result := NilHandle;
|
|
|
|
|
|
+ DynLibErrPath [0] := #0;
|
|
|
|
+ DynLibErrNo := DosLoadModule (@DynLibErrPath [0], SizeOf (DynLibErrPath),
|
|
|
|
+ PChar (Name), Handle);
|
|
|
|
+ if DynLibErrNo = 0 then
|
|
|
|
+ Result := Handle
|
|
|
|
+ else
|
|
|
|
+ Result := NilHandle;
|
|
end;
|
|
end;
|
|
|
|
|
|
function GetProcedureAddress (Lib: TLibHandle; const ProcName: AnsiString): pointer;
|
|
function GetProcedureAddress (Lib: TLibHandle; const ProcName: AnsiString): pointer;
|
|
var
|
|
var
|
|
P: pointer;
|
|
P: pointer;
|
|
begin
|
|
begin
|
|
- if DosQueryProcAddr (Lib, 0, PChar (ProcName), P) = 0 then Result := P
|
|
|
|
- else Result := nil;
|
|
|
|
|
|
+ DynLibErrPath [0] := #0;
|
|
|
|
+ DynLibErrNo := DosQueryProcAddr (Lib, 0, PChar (ProcName), P);
|
|
|
|
+ if DynLibErrNo = 0 then
|
|
|
|
+ Result := P
|
|
|
|
+ else
|
|
|
|
+ Result := nil;
|
|
end;
|
|
end;
|
|
|
|
|
|
function UnloadLibrary (Lib: TLibHandle): boolean;
|
|
function UnloadLibrary (Lib: TLibHandle): boolean;
|
|
begin
|
|
begin
|
|
- Result := DosFreeModule (Lib) = 0;
|
|
|
|
|
|
+ DynLibErrPath [0] := #0;
|
|
|
|
+ DynLibErrNo := DosFreeModule (Lib);
|
|
|
|
+ Result := DynLibErrNo = 0;
|
|
end;
|
|
end;
|
|
|
|
|
|
-Function GetLoadErrorStr: string;
|
|
|
|
|
|
+function GetDynLibsErrorStr: string;
|
|
|
|
+const
|
|
|
|
+ SysMsgFile: array [0..10] of char = 'OSO001.MSG'#0;
|
|
|
|
+var
|
|
|
|
+ VarArr: array [1..9] of PChar;
|
|
|
|
+ OutBuf: array [0..999] of char;
|
|
|
|
+ RetMsgSize: cardinal;
|
|
|
|
+ RC: cardinal;
|
|
|
|
+begin
|
|
|
|
+ if DynLibErrNo = 0 then
|
|
|
|
+ GetDynLibsErrorStr := ''
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ VarArr [1] := @DynLibErrPath [0];
|
|
|
|
+ RC := DosGetMessage (@VarArr, 1, @OutBuf [0], SizeOf (OutBuf),
|
|
|
|
+ DynLibErrNo, @SysMsgFile [0], RetMsgSize);
|
|
|
|
+ if RC = 0 then
|
|
|
|
+ Result := StrPas (@OutBuf [0])
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ WriteStr (Result, DynLibErrNo);
|
|
|
|
+ Result := 'Error ' + Result;
|
|
|
|
+ end;
|
|
|
|
+ if DynLibErrPath [0] <> #0 then
|
|
|
|
+ Result := StrPas (@DynLibErrPath [0]) + ' - ' + Result;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
|
|
|
|
+function GetDynLibsError: longint;
|
|
begin
|
|
begin
|
|
- Result:='';
|
|
|
|
|
|
+ GetDynLibsError := DynLibErrNo;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function GetDynLibsErrorStr: string;
|
|
|
|
+const
|
|
|
|
+ SysMsgFile: array [0..10] of char = 'OSO001.MSG'#0;
|
|
|
|
+var
|
|
|
|
+ VarArr: array [1..9] of PChar;
|
|
|
|
+ OutBuf: array [0..999] of char;
|
|
|
|
+ RetMsgSize: cardinal;
|
|
|
|
+ RC: cardinal;
|
|
|
|
+begin
|
|
|
|
+ if DynLibErrNo = 0 then
|
|
|
|
+ GetDynLibsErrorStr := ''
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ VarArr [1] := @DynLibErrPath [0];
|
|
|
|
+ RC := DosGetMessage (@VarArr, 1, @OutBuf [0], SizeOf (OutBuf),
|
|
|
|
+ DynLibErrNo, @SysMsgFile [0], RetMsgSize);
|
|
|
|
+ if RC = 0 then
|
|
|
|
+ Result := StrPas (@OutBuf [0])
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ WriteStr (Result, DynLibErrNo);
|
|
|
|
+ Result := 'Error ' + Result;
|
|
|
|
+ end;
|
|
|
|
+ if DynLibErrPath [0] <> #0 then
|
|
|
|
+ Result := StrPas (@DynLibErrPath [0]) + ' - ' + Result;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
-{$endif}
|
|
|
|
|
|
|
|
|
|
+function GetLoadErrorStr: string;
|
|
|
|
+begin
|
|
|
|
+ GetLoadErrorStr := GetDynLibsErrorStr;
|
|
|
|
+end;
|
|
|
|
+{$endif}
|