Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#12

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 19:08
Liegt dir nicht der Original export vor?
In dem Buch wird doch sicher irgendwie ein Beispiel oder sonstwas stehen, oder wenn sie von C++ kommt poste mal die Dekleration von dort.
Das Ding ist nämlich, bei PAnsiChar's gibt es 2 Mögliche aufrufe.
- Erstens du übergibst die Variable, wo der Pointer "gespeichert" bzw. hinterlegt wird. Die DLL legt ggf. den Speicher fest und übergibt dir den Pointer (Adresse);
- Du musst einen Speicher festlegen. Dazu müsstest du die Größe wissen, also wie Lang der Text sein wird. Du legst den Speicher fest und übergibst die Variable an die Funktion. Diese schreibt in die Adresse die Daten.

In deinem Fall würd ich auf das erste Tippen. Versuch mal folgendes:
Delphi-Quellcode:
function xyzErrMsg(errorCode : Word): Pointer; stdcall; external xyzdll name 'ErrMsg';
//oder mal das
function xyzErrMsg(errorCode : Word): Pointer; cdecl; external xyzdll name 'ErrMsg';
//oder mal einen von den Beiden
function xyzErrMsg(const errorCode : Word): Pointer; stdcall; external xyzdll name 'ErrMsg';
function xyzErrMsg(const errorCode : Word): Pointer; cdecl; external xyzdll name 'ErrMsg';
//noch eine Möglich aber unwahrscheinlich
function xyzErrMsg(var errorCode : Word): Pointer; stdcall; external xyzdll name 'ErrMsg';
function xyzErrMsg(var errorCode : Word): Pointer; cdecl; external xyzdll name 'ErrMsg';
//Bei allen Möglchkeiten lass das Pointer mal hintendran.

var
  Meldung : PAnsiChar;
  P : Pointer;
  ErrorCode : Word;
Begin
  for ErrorCode := 0 to High(Word) do
  begin
    P := xyzErrMsg(ErrorCode);
    If P <> nil then
    begin
      Meldung := P; //Setz mal hier ein Breakpoint
      ShowMessage(Meldung);
    end;
  end;
So bei irgendeinem Wert muss er ja einen Text zurückgeben. Und alle Imports mal durchgehen mit diesem Code.

EDIT: Sorry, überlesen, hast ja schon gesagt, dass es keine Doku oder sonstwas gibt. Das sie in C geschrieben ist, sollte einer der cdecl; oben vielleicht eher funken.
Vielleicht Funkt dan irgendwas.

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (21. Jun 2012 um 19:20 Uhr)
  Mit Zitat antworten Zitat