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 1 von 3  1 23      
hathor
(Gast)

n/a Beiträge
 
#1

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

  Alt 8. Sep 2007, 17:34
C++:
char *version;
int cpu0core0t;
...
version = "1.00";
cpu0core0t = 10; //dummy wert
etc.

wird ins Shared Memory geschrieben:

auslesen mit einem C++-Programm geht problemlos.

Mit einem Delphi-Programm kann ich nur Integer-Werte auslesen,
bei den Strings kommt nur Müll heraus.

Delphi-Quellcode:
type
  TSharedData = record
     cpu0core0t : Integer; //coretemp von cpu0,core0
   version: array [0..3] of char;
   ...
...

  with SharedData^ do
     Begin
        Memo1.lines.add(Inttostr(cpu0core0t));    //geht
      Memo1.lines.add(version);       //geht nicht
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#2

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

  Alt 8. Sep 2007, 17:39
Keine Ahnung ob das dein Problem löst, aber:
"1.00" ist 5 Zeichen lang, nicht vier. "Strings" in C/C++ werden durch \0 (char(0)) abgeschlossen.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#3

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

  Alt 8. Sep 2007, 17:41
Versuchs mal mit einem PChar.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

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

  Alt 8. Sep 2007, 17:44
Memo1.lines.add(PChar(version));

Ergebnis:

üÿÿ‹ð‰w‰~ ÇF¤B
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

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

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

  Alt 8. Sep 2007, 18:51
Du castest ja auch auf einen PChar, willst aber einen String ...

probiers also mal mit

Memo1.lines.add(String(version));
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

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

  Alt 8. Sep 2007, 19:51
Memo1.lines.add(String(version)); geht auch nicht
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

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

  Alt 8. Sep 2007, 19:55
Wie wäre es denn hier einfach mal den relevanten Teil des C++-Programms zu posten, welches in der Lage ist es zu lesen. Ich habe hier nämlich dieses unbestimmte Gefühl, daß du uns hier bei weitem nicht alle Fakten gegeben hast und dennoch eine zufriedenstellende Antwort erwartest.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

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

  Alt 8. Sep 2007, 20:06
Delphi-Quellcode:
#include "stdafx.h"
#include <windows.h>
#include <string>
using namespace std;

struct TData {
   char *version;
   int nr;
...
}


int main(int argc, char* argv[])

{
   const char* SHAREDMEMORYSEGMENTID = "CtMySiMcHa";
....
//write
   HANDLE host_handle;
   TData *host_data;
   host_handle =    CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(TData),SHAREDMEMORYSEGMENTID);
   host_data = (TData*)MapViewOfFile(host_handle,FILE_MAP_WRITE,0,0,0);
   host_data->version = "erste";
   host_data->nr = 1;

//read

   HANDLE client_handle;

   TData *client_data;
   client_handle = OpenFileMapping(FILE_MAP_READ,false,SHAREDMEMORYSEGMENTID);
   client_data = (TData*)MapViewOfFile(client_handle,FILE_MAP_READ,0,0,0);

   printf("Inhalt des SM - version: %s\n",client_data->version);
   printf("Inhalt des SM - nr: %i\n",client_data->nr);
...
   UnmapViewOfFile(host_data);
   CloseHandle(host_handle);

   UnmapViewOfFile(client_data);
   CloseHandle(client_handle);

   flushall();
   getchar();   

   return 0;
}
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

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

  Alt 8. Sep 2007, 20:17
Zitat von hathor:
Code:
struct TData { 
   char *version;
   int nr;
...
}
Wenn das einfach sooo geschrieben wird, würde ja nur der Pointer auf die Zeichenkette in der MMF abgespeichert, genau den wichtigen Teil hast du also weggelassen, dennn logischerweise ist der Pointer nur innerhalb des aktuellen Prozesses gültig. Entsprechend muß die Zeichenkette irgendwoanders innerhalb der MMF abgespeichert sein, oder man kann auf sie eben nicht zugreifen.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#10

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

  Alt 8. Sep 2007, 20:21
@Olli:

Was empfiehlst Du?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:45 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