C++ (Qt)...strm << mID;strm << mName;.. // еще десятки // а на др стороне...strm >> mID;strm >> mName;..
C++ (Qt)void MyStruct::ReadWrite( QDataStream & strm, bool modeWrite ){ ReadWriteInt(strm, &mID, modeWrite); ReadWriteQString(strm, &mName, modeWrite); ...}
void MyStruct::ReadWrite( QDataStream & strm, bool modeWrite ){if (modeWrite) out >> this.intPoleMyStruct >> this.qstringPoleMyStruct ... ;else ...}
C++ (Qt)void MyStruct::ReadWrite( QDataStream & strm, bool modeWrite )
C++ (Qt)template <class Stream, class T>void ReadWrite( Stream & strm, T * data, int mode ){ switch (mode) { case mode_Read: strm >> *data; break; case mode_Write: strm << *data; break; case mode_Skip: ... }}
// тестовый классclass TestRecord : public BoaInterface{public: bool boolField; char charField; short shortField; int intField; long longField; bigint bigintField; float floatField; double doubleField; string stringField; BoaDateTime dateField; TestRecord();};// функция получения объектаTestRecord* selRecord(TestRecord* rec);
// инициализация членов Boa-объектаTestRecord::TestRecord(){ push(boolField,"boolField"); push(charField,"charField"); push(shortField,"shortField"); push(intField,"intField"); push(longField,"longField"); push(bigintField,"bigintField"); push(floatField,"floatField"); push(doubleField,"doubleField"); push(stringField,"stringField"); push(dateField,"dateField",BoaDateTime::DateTime); }
// обработка запроса одной записиTestRecord* selRecord(TestRecord* rec){ // создание и отправка командного объекта BoaCommand cmd("selRecord"); if(cmd.send()==BOA_ERROR) return 0; // получение результата int ret=rec->receive(); // возвращаемое значение if(ret==BOA_ERROR) return 0; else return rec;}
// обработка запроса одной записиTestRecord* selRecord(TestRecord* arg){ // принятая команда BoaCommand* cmd=BoaCommandPtr(arg); // формирование данных для клиента TestRecord record; record["boolField"]=true; record["charField"]=char('c'); record["shortField"]=1; record["intField"]=10; record["longField"]=100; record["bigintField"]=1000; record["floatField"]=0.1; record["doubleField"]=0.01; record["stringField"]="Тестовая запись"; record["dateField"]=BoaDateTime::currentDateTime(); // отправка результата клиенту#if defined(__BORLANDC__) || defined(QT_WIN) // win-версия record.sendTo(cmd->hSocket);#else // *nix-версия record.send();#endif return 0;}