Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Zitat:
Dazu müsstest Du erstmal schreiben, was Du eigentlich machst ! Versuchst Du den C Quelltext nach Delphi zu portieren? dann musst Du Dir einen ShortString in TDATA anlegen, kein Array of Char .. vielleicht solltest Du noch etwas von Deinem Delphi Quelltext posten :-) oder liest Du ein MMF Aus, was ein C++ Programm schreibt, dann dann müsstest Du TSharedData eigentlich so definieren
Delphi-Quellcode:
TSharedData = packet record
version : PChar; nr : Integer; ... end; und dann geht auch Dein Memo1.lines.add(String(version)); wieder (damit wandelst Du den Pointer dann in einen Delphi String um) |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Zitat:
Code:
sizeof(TData) wird dir 12 zurückgeben! Und nun schreiben wir da rein:
struct TData {
char *version; int nr; int blubb; }
Code:
Fällt dir was auf? Ich empfehle, daß du uns das fehlende Puzzle-Stück postest und dann können wir auch helfen ;)
TData *pointer_auf_daten = ...;
pointer_auf_daten->nr = 1; pointer_auf_daten->blubb = 0; pointer_auf_daten->version = "Dieser String ist länger als 12 Zeichen"; |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
sizeof(TData) =8 !!!
|
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Zitat:
|
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Ich verstehe Dich nicht:
sizeof(TData) =8 in C++ und in Delphi! |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Zitat:
Code:
Ich würde sagen nach Adam Riese und Eva Klein hast du ein mathematisches Problem alle Daten eines Strings in nur 8 Byte unterzubringen, zumal ja in der Struktur - wie schon erwähnt - eben nicht der String selber sondern nur der Zeiger auf die Zeigenkette gespeichert wird.
CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,[color=red]sizeof(TData)[/color],SHAREDMEMORYSEGMENTID);
Nochmal also: Wo also wird der String gespeichert? |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Das Problem liegt m.E. nicht auf der C++- sondern der DELPHI-Seite.
Die Integer-Werte können korrekt ausgelesen werden - auch wenn Hunderte im Shared Memory sind, das Problem sind nur die Strings! Ich brauche nirgendwo bei C++ einen Speicher für den Zeiger auf die Zeichenkette - wenn die Daten im SHARED MEMORY sind, hat das C++ - Programm seinen Teil erfüllt. |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Mal so eine Frage am Rande. Was genau versuchst du da eigentlich? Handelt es sich dabei um zwei getrennte Anwendungen oder um eine Anwendungen und eine DLL? Denn irgendwie konnte ich nicht rausfinden was du da eigentlich genau vor hast.
Wenn es nur eine DLL ist dann kannst du problemlos mit pchar das Ganze erledigen. Wenn es zwei getrennte Anwendungen sind dann solltest du dir vor Augen halten, dass der Speicher normal nur für die Anwendung in einem virtuellen Speicherbereich gemappt werden. Und Pointer eignen sich dafür als Übertragungsmedium nicht. Du müsstest als entsprechend die Daten des Strings in dem SharedMemory Bereich ablegen. So wie das bei Zahlen von Hause aus der Fall ist. Und beim Auslesen müsstest du daraus wieder einen Text machen. Muss aber gestehen ist nur eine Vermutung, denn mit Shared Memory habe ich bisher noch so gut wie nichts gemacht. PS: Strings in Delphi haben noch 8 Bytes Nutzinformationen die sich VOR dem eigentlichen Pointer befinden. |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Zitat:
Zitat:
@Lossy eX: Waren es nicht sogar 12 Bytes? Ich entsinne mich auch eines Referenzzählers neben Länge und Zeiger. Aber ich habe kein Delphi zum Überprüfen hier. |
Re: Strings: von C++ senden - in Delphi empfangen : WIE?
Olli: Also davor sieht es so aus. [Referänzzähler][Länge][Stringdaten] und evtl abschließendes [#0]. Dabei bin ich mir aber nicht sicher. Und der Pointer eines Strings zeigt auf den Anfang der Daten. Aber du brauchst natürlich auch noch eine Variable die den Pointer aufnimmt. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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