AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Record mit PChars zwischen Anwendung und DLL übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Record mit PChars zwischen Anwendung und DLL übergeben

Ein Thema von Peter1981 · begonnen am 22. Dez 2009 · letzter Beitrag vom 22. Dez 2009
Antwort Antwort
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#1

Record mit PChars zwischen Anwendung und DLL übergeben

  Alt 22. Dez 2009, 11:35
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?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Record mit PChars zwischen Anwendung und DLL übergeben

  Alt 22. Dez 2009, 11:38
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#3

Re: Record mit PChars zwischen Anwendung und DLL übergeben

  Alt 22. Dez 2009, 11:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

Re: Record mit PChars zwischen Anwendung und DLL übergeben

  Alt 22. Dez 2009, 12:22
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#5

Re: Record mit PChars zwischen Anwendung und DLL übergeben

  Alt 22. Dez 2009, 12:36
Danke himitsu, hab das Problem gerade funden, hatte Anwendungsseitig die Funktion nicht als stdcall deklariert, jetzt funktioniert es wie gewünscht.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:41 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