![]() |
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? |
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. |
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.
|
Re: Record mit PChars zwischen Anwendung und DLL übergeben
Zitat:
Zitat:
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? |
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 12:56 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