Хорошо. Попробую этот метод.
Создаю массив и указатель:
arrDataSend : ARRAY[1..20000] OF BYTE; // Буфер для отправки
wPointer : WORD := 0; // Указатель для накидывания новых строк в буфер
wsLine01 : WSTRING := "Строка с кириллицей номер 01"; // Наша первая строка
wsLine02 : WSTRING := "Строка с кириллицей номер 02"; // Наша вторая строка
wsLine03 : WSTRING := "Строка с кириллицей номер 03"; // Наша третья строка
Программа по склеиванию:
// Первая строка:
MEM.MemMove(ADR(wsLine01), ADR(arrDataSend[wPointer]), len(wsLine01));
wPointer := wPointer + (len(wsLine01) * 2);
// Вторая строка:
MEM.MemMove(ADR(wsLine02), ADR(arrDataSend[wPointer]), len(wsLine02));
wPointer := wPointer + (len(wsLine02) * 2);
// Третья строка:
MEM.MemMove(ADR(wsLine03), ADR(arrDataSend[wPointer]), len(wsLine03));
wPointer := wPointer + (len(wsLine03) * 2);
// Отправка на сервер:
...
fbTcpWrite(xExecute:=TRUE, hConnection:=fbTcpClient.hConnection, pData:=ADR(arrDataSend), szSize:=wPointer);
...
Указатель каждый раз инкрементируется на len*2 (из-за WSTRING) и каждая следующая строка начинает ложиться в буфер по новому значению.
Тут есть вопрос: len не хочет отдавать длину строки, если она wstring. Видимо, len работает только со string. Какая функция отдаст длину wstring?
И вообще, я правильно понял предложенную реализацию?
Спасибо.





Ответить с цитированием