AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record aus DLL "importieren"

Ein Thema von S20000 · begonnen am 7. Jun 2008 · letzter Beitrag vom 8. Jun 2008
 
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Record aus DLL "importieren"

  Alt 7. Jun 2008, 17:58
Moin Sebastian,

diese Konstellation hast Du bei vielen API-Funktionen auch.
Damit die Funktion etwas in den Record speichern kann gibt es zwei Möglichkeiten:
  1. Du reservierst Speicher, und übergibst diese Adresse an die Funktion, damit sie dort Daten reinschreiben kann.
  2. Du übergibst die Adresse einer Variablen, und die Funktion reserviert auch den Speicher, bevor sie Daten in den Record schreibt, und gibt dann diese Adresse zurück.

Der erste Fall ist der üblichere, der zweite tritt vornehmlich bei der LAN-Manager-API auf.
In jedem Falle musst Du dann auch den Speicher wieder freigeben.

Beispiel:

Delphi-Quellcode:
Type
  PMyRecord = ^TMyRecord;
  TMyRecord = packed record
    cbNameSize : DWORD; // hierüber erfährt die Funktion, wieviel Speicher für lpName reserviert wurde
    lpName : PChar; // hier kann die Funktion dann etwas zurückliefern.
  end;

function ImportierteDLLFunktion(const AMyRecord : PMyRecord) : Integer; stdcall; external 'DLLNAME.DLL';

procedure Irgendwas;

var
  mr : TMyRecord;

begin
  FillChar(mr,SizeOf(mr),0); // Kann i.d.R. entfallen, wenn man alle Felder des Records verwendet
  mr.cbName := 100; // Die Funktion bekommt 99 Zeichen Speicher (zzgl. der abschliessenden 0)
  mr.lpName := AllocMem(mr.cbName); // Jetzt noch den Speicher reservieren
  try
    // Der Funktion wird die Adresse des Records übergeben
    if ImportierteDLLFunktion(@mr) = 0 then begin // mal angenommen 0 sagt aus: Alles OK
      ShowMessage(mr.lpName);
    end else begin
      ShowMessage('Fehler');
    end;
  finally
    FreeMem(mr.lpName,mr.cbName);
  end;
end;
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
 


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:04 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