Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: VCL (C++ Builder) ::  klassen versenden     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
unixman
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.07.2001
Beiträge: 88
Beitrag unixman Mitglied 00:53:00 26.12.2002   Titel:   klassen versenden            Zitieren

hiho,

ich versuche allerhand informationen über sockets zu übertragen,
leider bin ich immer am Sendstring gescheitert - hab das nie richtig hinbekommen

mir kam nur die idee einfach klassen zu versenden, man kann sie ja un dateien schreiben... nur wie ich das über die borland-sockets machen soll is mir nen rätsel, aber ich komm um die nich drumrum, da ich das ganze management-zeuch der borland-sockets nich verlieren will... hat schon mal jemand sowas gemacht, bis für jeden tipp dankbar :)


gruss unixman
junix
Moderator

Benutzerprofil
Anmeldungsdatum: 31.10.2001
Beiträge: 7628
Beitrag junix Moderator 01:06:00 26.12.2002   Titel:              Zitieren

Hmmm Klassen an sich lassen sich ja nicht einfach speichern.... es gibt mittel und wege ich vermute du verwendest die? Sieh dir auch SendStream & Co an... (Alles in der Hilfe zu finden)

-junix

_________________
What do you think? Are you a coder or a programmer?
unixman
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.07.2001
Beiträge: 88
Beitrag unixman Mitglied 01:20:00 26.12.2002   Titel:              Zitieren

send stream hab ich ne zum laufen bekommen...und wie soll ich die klassen ín den stream und wieder raus bekommen?

ein beispiel aus der borland hilfe:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
struct mystruct
{
  int i;
  char ch;
};
 
int main(void)
{
   FILE *stream;
   struct mystruct s;
 
   if ((stream = fopen("TEST.$$$", "wb")) == NULL)  /* Öffnet Datei TEST.$$$ */
   {
      fprintf(stderr, "Cannot open output file.\n");
      return 1;
   }
   s.i = 0;
   s.ch = 'A';
   fwrite(&s, sizeof(s), 1, stream);  /* write struct s to file */
   fclose(stream);  /* close file */
   return 0;
}


die nehmen ne instanz ner strukur, laden die voll,
und schreiben die in ne datei,

das lesen geht dann mit fread man gibt an wie gross die struktur ist und zerrt die dann wieder raus

das geht auch mit klassen - muss gehen
da kenn ich was, ich kuck ma eben:
http://www.informit.de/books/c++21/data/start.htm
das is mit klassen

das muss doch auch über sockets gehen
junix
Moderator

Benutzerprofil
Anmeldungsdatum: 31.10.2001
Beiträge: 7628
Beitrag junix Moderator 01:26:00 26.12.2002   Titel:              Zitieren

Ich hab was besseres: http://www.c-plusplus.de/oop_dummies/kap24-reste.pdf (-;

Ahja, schau nochmal genau hin, was SendStream für welche Parameter erwartet... Es handelt sich dabei nicht um den Standard-C-Stream (-;

-junix

_________________
What do you think? Are you a coder or a programmer?
unixman
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.07.2001
Beiträge: 88
Beitrag unixman Mitglied 04:49:00 26.12.2002   Titel:              Zitieren

das weiß ich selber :)
ich mag das ganze borland zeuch nur nich so richtig
alles was ich ja theoretisch tun muss: klasse nach char (*) casten -> char(*) nach String->Senden ->String nach char(*)->char (*) nach klasse casten - fertig
ich wollte ja nur wissen ob ja jemand schonmal erfahrungen gesammelt hat, oder jemand der Erfahrener ist als ich das ma für mich testen kann - damit ich keine 'dummheitsfehler' einbaue
unixman
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.07.2001
Beiträge: 88
Beitrag unixman Mitglied 05:24:00 26.12.2002   Titel:              Zitieren

also: hab das eben nochma probiert, bin aber wiedermal nich dahinter gekommen...
das mit den streams ist dann wohl die beste methode...

hab ebenn im forum gesucht - zu sendstream hab ich nix gefunden - is ja auch simpel - aber wie les ich den dann wieder aus? RecvdString->Stream->Klasse??
junix
Moderator

Benutzerprofil
Anmeldungsdatum: 31.10.2001
Beiträge: 7628
Beitrag junix Moderator 15:05:00 26.12.2002   Titel:              Zitieren

Den PDF-Artikel gelesen? Du unterliegts einem grundsätzlichenj Irrtum... SO können Klassen nicht versendet werden. Klassen können weitere Zeiger enthalten welche wieder wo ganz anders hinzeigen, die dann auf der neuen Maschine absolut nicht stimmen.
Die Selbe problematik existiert auch beim Speichern von Strukturen.

Ausserdem solltest du von der ganzen String-Theorie ebenfalls wegkommen. Du kannst binäre daten nicht nach Belieben nach String und wieder zurück konvertieren... Ein TStream ist genau dazu da binäre Daten zu verschieben. Belies dich
a) mal etwas zu TStream und deren Ableitungen
b) zum Thema Klassenspeichern (siehe den Artikel oben)

Zitat:
ich mag das ganze borland zeuch nur nich so richtig


Das musst du mir erklären.... du arbeitet ja mit dem Builder oder mit Kylix oder?

-junix

_________________
What do you think? Are you a coder or a programmer?
unixman
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.07.2001
Beiträge: 88
Beitrag unixman Mitglied 00:59:00 27.12.2002   Titel:              Zitieren

also wegen dem borland-zeuch: ich versuch ansich so wenig wie möglich davon zu benutzen um den quellcode portabel und 'nativ' damit jeder, auch der der ncih weis was ein stream ist den code lesen kann...

Wegen den Zeigern in den Klassen:
die klassen stammen von mir und sind mehr oder weniger nur Container:
C++:
class CTest
{
public:
String eins, zwei;
int ieins, izwei;
}

...so in der art.... man könnte ja auch strukturen nehmen....

Wegen den strings. ich hab mal noch bissel im forum gesucht, da bin ich auf
die funktionen: 'ComponentToString' & 'StringToComponent' gestoßen, habs nur nich hingebracht die auf meine klasse(n) um zu rödeln...ich hab mir so gedacht wenn man komplexe Komponenten als string speichern kann muss das auch mit meinen klassen gehen...

oder sitze ich jetzt wieder einem irrtum auf?


[Edit]
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String ClassToString(CTest *comp, int size)
{
 AnsiString as;
 TMemoryStream* pms = new TMemoryStream();
 TStringStream* pss = new TStringStream(as);
try
 {
 
 pms->WriteBuffer(comp,size);
    pms->Position = 0;
    ObjectBinaryToText(pms, pss);
    pss->Position = 0;
    String temp=pss->DataString;
    delete pms;
    delete pss;
    return temp;
 }

hab das so versucht - bekommt immer eins mit der 'ungültiges-stream-format-keule'
[/edit]

[ Dieser Beitrag wurde am 27.12.2002 um 00:11 Uhr von unixman editiert. ]
junix
Moderator

Benutzerprofil
Anmeldungsdatum: 31.10.2001
Beiträge: 7628
Beitrag junix Moderator 02:43:00 28.12.2002   Titel:              Zitieren

Zitat:
Original erstellt von unixman:
oder sitze ich jetzt wieder einem irrtum auf?


allerdings... Hast du denn den Link den ich angegeben habe mal angeschaut? Mag nicht das ganze nochmal erklären, wenns Marc++us ja bereits - zu mindest in der Entwurffassung - in seinem Buch verewigt hat.

-junix

_________________
What do you think? Are you a coder or a programmer?
c++.de :: VCL (C++ Builder) ::  klassen versenden   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.