Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Record mit PChars zwischen Anwendung und DLL übergeben (https://www.delphipraxis.net/145032-record-mit-pchars-zwischen-anwendung-und-dll-uebergeben.html)

Peter1981 22. Dez 2009 11:35


Record mit PChars zwischen Anwendung und DLL übergeben
 
Hallo,

ich verzweifle gerade daran, einen Zeiger auf ein Record, welches mehrere PChars enthält, zwischen Anwendung und DLL zu übergeben.
In meiner Anwendung erstelle ich eine neue Instanz des Records mit New(pRecord), fülle anschließend die verschiedenen PChars innerhalb dieses Records und will dann den Zeiger pRecord an eine Funktion in einer DLL übergeben. Wenn diese Funktion allerdings als stdcall deklariert ist, bekomme ich nach dem dereferenzieren des übergebenen Zeigers nur noch Datenmüll. Wenn ich stdcall weglasse, funktioniert es allerdings wie gewollt. Gibt es dafür eine Lösung, wenn möglich ohne gemeinsamen Speichermanager?

Elvis 22. Dez 2009 11:38

Re: Record mit PChars zwischen Anwendung und DLL übergeben
 
Wie füllst du die PCHars?
Es kann gut sein, dass die dazu gehörigen Strings schon vernichtet wurden.
Wenn du Kontrolle über DLL und App hast, könntest du auf WideString umstellen, den ein OleString ist unabhängig von Delphis Speichermanagement.

Peter1981 22. Dez 2009 11:50

Re: Record mit PChars zwischen Anwendung und DLL übergeben
 
Ja, WideStrings wären eine Möglichkeit, werde ich mal ausprobieren. Die PChars gefüllt habe ich einmal direkt mit MyPChar := 'irgendwas', dann auch mit GetMem und StrAlloc versucht, war immer das gleiche Ergebnis.

himitsu 22. Dez 2009 12:22

Re: Record mit PChars zwischen Anwendung und DLL übergeben
 
Zitat:

Wenn diese Funktion allerdings als stdcall deklariert ist
War es in Anwendung und DLL auch gleich definiert?


Zitat:

Die PChars gefüllt habe ich einmal direkt mit MyPChar := 'irgendwas', dann auch mit GetMem und StrAlloc versucht, war immer das gleiche Ergebnis.
Sollte in diesem Falle eigentlich alles funktionieren (man muß nur aufpassen, daß die Strings, auf welche die PChars zeigen, nicht freigegeben werden, bevor sie verarbeitet wurden)

Und es sollte bei sowas auch keinen Unterschied machen mit welchen Aufrufkonventionen gearbeitet wird, solange der Record richtig übergeben wird.

PS: nutz du für Beide (EXE und DLL) den selben Compiler, mit den selben Einstellungen?

Peter1981 22. Dez 2009 12:36

Re: Record mit PChars zwischen Anwendung und DLL übergeben
 
Danke himitsu, hab das Problem gerade funden, hatte Anwendungsseitig die Funktion nicht als stdcall deklariert, jetzt funktioniert es wie gewünscht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 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