![]() |
Probleme mit Datentypen bei einer DLL
Moin,
ich habe eine DLL die mir laut Buch eine Adresse auf einen Null-Termierten String zurückgibt ( returns the address of a null-terminated character string ). Habe da bereits alle möglichen Datentypen ausprobiert und komme auf keinen grünen Zweig. Vielleicht hat hier jemand einen Tip? Die dll ist aus dem Jahre 2004 und wird seitdem nicht mehr verändert - ich arbeite hier mit Delphi XE unter Windows 7. der Aufruf ist: function xyzErrMsg ( errorCode : Word ) : String; stdcall; external xyzdll name 'ErrMsg'; Der Datentyp String passt hier leider nicht Gruss McInternet |
AW: Probleme mit Datentypen bei einer DLL
Hast Du es mal mit
Delphi-Quellcode:
versucht ?
PAnsiChar
Gruß K-H |
AW: Probleme mit Datentypen bei einer DLL
Zitat:
var Meldung : PAnsichar; Meldung := yxzErrMsg(errornummer); Gruss McInternet |
AW: Probleme mit Datentypen bei einer DLL
ne - kommt nur Blödsinn :(
Gruss McInternet |
AW: Probleme mit Datentypen bei einer DLL
Nein, ich glaube du hast ihn falsch verstanden, du musst sozusagen, wie du die Funktion importierst ändern.
Delphi-Quellcode:
zu:
function xyzErrMsg ( errorCode : Word
) : String; stdcall; external xyzdll name 'ErrMsg';
Delphi-Quellcode:
Gruß NickelM
function xyzErrMsg ( errorCode : Word
) : PAnsiChar; stdcall; external xyzdll name 'ErrMsg'; //Man verwendet ungern Strings, also den DatenTyp String von Delphi. PAnsiChar ist nur eine Adresse auf den Anfang eines Textes im Speicher. Und um im Speicher zu wissen, wann er aufhört, setzt man ein 0 Byte (#0 in Char) am Ende. D.h. wenn du auf den Datentyp PAnsiChar zugreifst, wird alles gelesen bis zum 0 Byte. |
AW: Probleme mit Datentypen bei einer DLL
Zitat:
Ich rufe dann diese Funktion so auf: var Meldung : PAnsiChar; Fehlernummer : Word; Begin Meldung := xyzErrMsg(Fehlernummer); ... ... end; nur leider steht da nur Blödsinn drin ( wenn ich schon mit dem Debugger reinschaue) => $495ABA{"} .... und drin stehen muß z.B. => success etc. Achso: Das Gleiche compiliert unter Delphi 2007 - einwandfrei! Gruß McInternet |
AW: Probleme mit Datentypen bei einer DLL
Der Funktionskopf ist schon ungewöhnlich für eine Funktion in einer DLL. Normalerweise übergibt man einen Speicherbereich, den man selbst reserviert hat, welcher dann durch die Funktion befüllt wird. Ist die DLL in Delphi geschrieben? Falls in C/C++, hast Du da Header-Dateien dafür? Wie sähe dann da der Originalaufruf aus?
|
AW: Probleme mit Datentypen bei einer DLL
Zitat:
Headerdateien gibt es auch keine :evil: Gruß McInternet |
AW: Probleme mit Datentypen bei einer DLL
Zitat:
Wie heißt das Produkt? Kann man sich diese DLL/API-Beschreibung noch von Intel herunter laden? |
AW: Probleme mit Datentypen bei einer DLL
Zitat:
Es gibt ja offensichtlich mehrere Fehlermeldungen, die über einen errorCode ausgewählt werden. Die Strings liegen in dem Fall hartcodiert im Speicherbereich der DLL und der Aufrufer bekommt lediglich einen Zeiger zurück.
Delphi-Quellcode:
function xyzErrMsg(errorCode : Word): PAnsiChar; stdcall; external xyzdll name 'ErrMsg';
var Meldung : AnsiString; // nicht PAnsiChar ! Fehlernummer : Word; Begin Fehlernummer := 42; // nicht vergessen die Fehlernummer zu setzen!!! Meldung := xyzErrMsg(Fehlernummer); // Zeiger auf 0-terminierten String wird automatisch in einen Delphi-String umgewandelt. (Compiler Magic) ShowMessage(Meldung); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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