AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim Laden einer DLL zur Laufzeit
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Laden einer DLL zur Laufzeit

Ein Thema von magicshadow · begonnen am 4. Jun 2003 · letzter Beitrag vom 4. Jun 2003
Antwort Antwort
magicshadow

Registriert seit: 28. Apr 2003
85 Beiträge
 
#1

Problem beim Laden einer DLL zur Laufzeit

  Alt 4. Jun 2003, 10:26
Hallöchen!
Ich hab ein "kleines" Problem mit dem Laden einer DLL.

mal direkt meine codes:

gleichbleibende Deklarationen:
Code:
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;
Die eigentliche Funktionbleibt gleich)
Code:
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;
Laden zum Startzeitpunktfunktioniert)
Code:
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';
Laden zur Laufzeit (erste Funktion): (funktioniert nicht)
Code:
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;
Mein Problem sind nun die Parameter, da diese ja ausgefüllt zurückgegeben werden müßten. Dies geschiet aber nicht!

Wäre super wenn jemand wüßte wie man dies erreichen kann?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 4. Jun 2003, 11:08
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?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
magicshadow

Registriert seit: 28. Apr 2003
85 Beiträge
 
#3
  Alt 4. Jun 2003, 11:20
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 4. Jun 2003, 11:29
Moin magicshadow,

Zitat von magicshadow:
Also das result liefert den richtigen Wert (DWORD)
Dann will ich die Frage mal anders Formulieren:

Welchen Wert denn?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
magicshadow

Registriert seit: 28. Apr 2003
85 Beiträge
 
#5
  Alt 4. Jun 2003, 11:42
mhmm, scheint doch nicht ok zu sein, Rückgabewert ist 87 (sollte aber 0 sein, soweit ich weiß)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 4. Jun 2003, 11:47
Moin magicshadow,

also ERROR_INVALID_PARAMETER.

Wie hast Du denn TREC deklariert?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
magicshadow

Registriert seit: 28. Apr 2003
85 Beiträge
 
#7
  Alt 4. Jun 2003, 11:49
Des hab ich doch glatt vergessen zu schreiben!

Code:
TREC = function(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 4. Jun 2003, 11:52
Moin magicshadow,

trag' doch bei der Deklaration mal stdcall nach.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
magicshadow

Registriert seit: 28. Apr 2003
85 Beiträge
 
#9
  Alt 4. Jun 2003, 11:58
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 )

THX für die Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz