Ich habe seit ca. 2 Wochen versucht, ein Objekt einer beliebigen Klasse von TComponent
auf einem TMemoryStream
Objekt mit seiner writecomponent
Methode und rief dieses Objekt wieder mit readcomponent
Methode abgeleitet zu schreiben. Obwohl ich dachte, dies sei eine leichte Aufgabe, kann ich es nicht richtig machen. Tatsächlich gibt es keinen Kompilierungsfehler, aber die Attribute des Objekts werden nicht korrekt geladen. Bitte hilf mir herauszufinden, was ich falsch gemacht habe. Hier ist mein Codeausschnitt., wie zu schreiben und lesen Komponenten TMemoryStrream
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <memory>
#include <iostream>
#include <conio.h>
#pragma argsused
using namespace std;
class Woman : public TComponent
{
private:
int Age;
public:
UnicodeString Name;
Woman(TComponent* _Owner, int InAge, UnicodeString InName)
: TComponent(_Owner)
{
Age = InAge;
Name = InName;
}
int GetAge()
{
return Age;
}
};
void RegisterClassesWithStreamingSystem(void)
{
#pragma startup RegisterClassesWithStreamingSystem
Classes::RegisterClass(__classid(Woman));
}
int _tmain(int argc, _TCHAR* argv[])
{
Woman* FirstWoman = new Woman(NULL, 25, "Anjelina");
UnicodeString as;
auto_ptr<TMemoryStream> MStr(new TMemoryStream);
auto_ptr<TStringStream> SStr(new TStringStream(as));
MStr->WriteComponent(FirstWoman);
MStr->Seek(0, soFromBeginning);
ObjectBinaryToText(MStr.get(), SStr.get());
SStr->Seek(0, soFromBeginning);
as = SStr->DataString;
auto_ptr<TMemoryStream> pms(new TMemoryStream);
auto_ptr<TStringStream> pss(new TStringStream(as));
TComponent *pc;
ObjectTextToBinary(pss.get(), pms.get());
pms->Seek(0, soFromBeginning);
pc = pms->ReadComponent(NULL);
Woman* AWoman;
AWoman = dynamic_cast<Woman*>(pc);
cout << AWoman->GetAge() << endl;
cout << AWoman->Name.c_str() << endl;
FirstWoman->Free();
pc->Free();
getch();
return 0;
}
Dank liebe Remy . Ich liebe dich Mann. Es funktionierte. du bist ein Genie –