AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Strings: von C++ senden - in Delphi empfangen : WIE?
Thema durchsuchen
Ansicht
Themen-Optionen

Strings: von C++ senden - in Delphi empfangen : WIE?

Ein Thema von hathor · begonnen am 8. Sep 2007 · letzter Beitrag vom 9. Sep 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#11

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 19:48
Zitat von hathor:
@Olli:

Was empfiehlst Du?

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)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#12

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 19:55
Zitat von hathor:
@Olli:

Was empfiehlst Du?
Okay, nehmen wir mal folgende Deklaration für die Struktur an:

Code:
struct TData { 
   char *version;
   int nr;
   int blubb;
}
sizeof(TData) wird dir 12 zurückgeben! Und nun schreiben wir da rein:

Code:
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";
Fällt dir was auf? Ich empfehle, daß du uns das fehlende Puzzle-Stück postest und dann können wir auch helfen
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#13

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 20:10
sizeof(TData) =8 !!!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#14

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 20:12
Zitat von hathor:
sizeof(TData) =8 !!!
Großartig, und 12 ist größer als 8. Ändert bisher nichts an meiner obigen Aussage.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#15

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 20:19
Ich verstehe Dich nicht:

sizeof(TData) =8 in C++ und in Delphi!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#16

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 20:29
Zitat von hathor:
Ich verstehe Dich nicht:

sizeof(TData) =8 in C++ und in Delphi!
Ändert noch immer nichts. Dein Code:

Code:
CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,[color=red]sizeof(TData)[/color],SHAREDMEMORYSEGMENTID);
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.

Nochmal also: Wo also wird der String gespeichert?
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#17

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 21:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#18

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 21:22
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.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#19

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 8. Sep 2007, 22:52
Zitat von hathor:
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!
Wunderbar. Wenn du das schon weißt, warum fragst du dann?

Zitat von hathor:
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.
Ja das ist ja auch alles ganz toll, wenn du nur erstmal die eigentliche Zeichenkette und nicht nur den Zeiger abspeicherst. In dem bißchen Code, welches du gezeigt hast, habe ich nirgends auch nur annähernd gesehen, daß du die Zeichenkette "im SHARED MEMORY" speicherst. Vielmehr hast du eben den Zeiger in Prozeß X damit an Prozeß Y übergeben.

@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.
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#20

Re: Strings: von C++ senden - in Delphi empfangen : WIE?

  Alt 9. Sep 2007, 10:48
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.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:18 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