![]() |
Problem beim Laden einer DLL zur Laufzeit
Hallöchen!
Ich hab ein "kleines" Problem mit dem Laden einer DLL. mal direkt meine codes: gleichbleibende Deklarationen:
Code:
Die eigentliche Funktion:(bleibt gleich)
const
RAS_MaxDeviceType = 16; RAS_MaxEntryName = 256; RAS_MaxDeviceName = 128; type {$IFNDEF UNICODE} TCHAR = type Char; {$ELSE} TCHAR = type WideChar; {$ENDIF} RAS_STATS = packed record dwSize : DWORD; dwBytesXmited : DWORD; dwBytesRcved : DWORD; dwFramesXmited : DWORD; dwFramesRcved : DWORD; dwCrcErr : DWORD; dwTimeoutErr : DWORD; dwAlignmentErr : DWORD; dwHardwareOverrunErr : DWORD; dwFramingErr : DWORD; dwBufferOverrunErr : DWORD; dwCompressionRatioIn : DWORD; dwCompressionRatioOut : DWORD; dwBps : DWORD; dwConnectDuration : DWORD; end; PRasConnA = ^PRasConn; PRasConnW = ^PRasConn; PRasConn = record dwSize : DWORD; hrasconn : DWORD; szEntryName : array [0..RAS_MaxEntryName] of Char; szDeviceType : array [0..RAS_MaxDeviceType] of Char; szDeviceName : array [0..RAS_MaxDeviceName] of Char; end;
Code:
Laden zum Startzeitpunkt:(funktioniert)
Procedure GetSystemParams;
var Res,lpcb,NumberOfEntries :DWORD; Entries :array[0..255] of PRasConn; mystats :RAS_STATS; i :DWORD; bytesdown,bytesup :Cardinal; begin Entries[0].dwsize:=412; lpcb:=256*Entries[0].dwsize; NumberOfEntries:=0; Res := RasEnumConnections(Entries[0], lpcb, NumberOfEntries); mystats.dwsize:=sizeof(mystats); bytesup:=0; bytesdown:=0; for i:=0 to NumberOfEntries-1 do begin Res:= RasGetConnectionStatistics(Entries[i].hrasconn,mystats); bytesdown:=bytesdown+mystats.dwBytesRcved; bytesup:=bytesup+mystats.dwBytesXmited; end; end;
Code:
Laden zur Laufzeit (erste Funktion): (funktioniert nicht)
function RasEnumConnections(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD; stdcall; external 'RasApi32.dll' name 'RasEnumConnectionsA';
function RasGetConnectionStatistics(const hRasConn : DWORD;const lpStatistics : RAS_STATS) : DWORD; stdcall; external 'RasApi32.dll';
Code:
Mein Problem sind nun die Parameter, da diese ja ausgefüllt zurückgegeben werden müßten. Dies geschiet aber nicht!
function RasEnumConnections(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD;
var REC:TREC; Handle:THandle; begin Handle:=LoadLibrary('RasApi32.dll'); if handle<>0 then begin @REC:= GetProcAddress(Handle,'RasEnumConnectionsA'); if @REC<>nil then begin result:=REC(lprasconn,lpcb,lpcconnections); end; freeLibrary(Handle); end; end; Wäre super wenn jemand wüßte wie man dies erreichen kann? |
Moin MagicShadow,
zum Einen: Was steht denn nach Ausführung der Funktion in Result? Zum Anderen: Hast Du auch daran gedacht dwSize zu füllen? |
Also das result liefert den richtigen Wert (DWORD).
Aber die Parameter die übergeben werden müßten auch werte beinhalten, und da hakts. Die eigentliche Prozedur funktioniert einwandfrei, wenn ich die API's zum Startzeitpunkt einbinde. Da das Programm dann jedoch weder unter Win NT 4 noch unter 9X/ME funktioniert möchte ich die Api's erst nach einem OS-Check laden, oder eben nicht. |
Moin magicshadow,
Zitat:
Welchen Wert denn? |
mhmm, scheint doch nicht ok zu sein, Rückgabewert ist 87 (sollte aber 0 sein, soweit ich weiß)
|
Moin magicshadow,
also ERROR_INVALID_PARAMETER. Wie hast Du denn TREC deklariert? |
Des hab ich doch glatt vergessen zu schreiben!
Code:
TREC = function(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD;
|
Moin magicshadow,
trag' doch bei der Deklaration mal stdcall nach. |
Ich glaubs nciht, hätt cih eigentlich drauf kommen müßen *g*
Funst. (Das kommt davon wenn man sich zu sehr an Tutorials hält :D ) THX für die Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz