Корень проблемы в том, что Socket.SendBuf() не желает отправлять/принимать записи (record) содержащие параметры типа string, ибо обычная строка это просто указатель на строку (? не уверен так ли я понял компилятор, но что-то вроде того). То есть:
Код | type TRecL = record s1: string; s2: string; end;
TRecS = record s1: string[255]; s2: string[255]; end;
var RecL: TRecL; RecS: TRecS;
//. . .
Socket.SendBuf(RecL, SizeOf(RecL)); // Не взлетит Socket.SendBuf(RecS, SizeOf(RecS)); // Взлетит
|
Но это не решает проблему, так как я работаю со специфичными символами (нид юникод). А решение выше имеет такой побочный эффект:
Код | RecL.s1:= 'aұ⌘e'; RecL.s2:= 'cіздің';
// В выводе и отладчике вижу RecL = ((s1:'aұ⌘e'), (s2:'cіздің'))
RecS.s1:= RecL.s1; RecS.s2:= RecL.s2;
// В выводе и отладчике вижу RecS = ((s1 : 'a??e'), (s2 : 'cізді?'))
|
Пишу в XE5, где строки по умолчанию в юникоде, но как видно string[xx] превращается в анси.
Как это можно побороть? Существует ли что-то вроде widestring[xx]? |