Цитата Сообщение от vodav Посмотреть сообщение
Давайте так:

Код:
TYPE STRUCTURA:
STRUCT
...
buff: ARRAY[1..30] TO BYTE;
size_buff:BYTE;
...
END_STRUCT
END_TYPE

var 
S:STRUCTURA;(*Объявил структуру*)
x:byte:=0; (*для свитча*)
buff1: ARRAY [1..10] OF BYTE;(*Массив №1*)
..
buff3: ARRAY [1..30] OF BYTE;(*Массив №3*)
POINT1:POINTER TO STRUCTURA;
i:BYTE;
end_var

CASE x OF:
1:S.size_buff=10;
FOR i:=1 TO 10 DO
  S.buff[i]:=buff1[i];
END_FOR
2:S.size_buff=20;
FOR i:=1 TO 20 DO
  S.buff[i]:=buff1[i];
END_FOR
3:S.size_buff=30;
FOR i:=1 TO 30 DO
  S.buff[i]:=buff1[i];
END_FOR
END_CASE; 

POINT1:=ADR(S);

SysSockSend(Socket,POINT1,SIZEOF(POINT1^),0);
Ну и в чем тогда смысл плавающего размера массива ?

Код:
TYPE TBUF
ARRAY[1..30] TO BYTE;
END_TYPE

TYPE STRUCTURA:
STRUCT
...
size_buff:BYTE;
buff: TBUF;
... 
END_STRUCT
END_TYPE

var 
S:STRUCTURA;(*Объявил структуру*)
x:byte:=0; (*для свитча*)
buff : ARRAY [1..3] OF TBUF(*Все массивы. Запас пофиг. Тут сэкономленное ни кому не нужно*)
end_var

x := limit(1,x,3); //чуть контроля
S.size_buf :=(x - 1) * 10;
S.buff := buf[i]; //не все ли равно что скопировано 30 байт если приемник знает size_buf ?
SysSockSend(Socket, adr(s), SIZEOF(s), 0);
Когда размер плавающий, это:
1.Или отправку мастерят в отдельный буфер - Yegor уже сказал
2.Или реализуют за запасом по максимуму - Vodav, но смысл в динамике ?
3.Или плавающую часть держат в конце и сам объект таскают динамически по куче
4.Отправляют друг за другом - если позволяет логика обработки на другом конце
5.Или JSON - Capzap предложил

Вариант симбиоза 1 и 3

Код:
TYPE STRUCTURA:
STRUCT
 ... //заголовок вообще без буфера
 szBuf:BYTE; //только размер, а буфера нету 
END_STRUCT
END_TYPE


---------
function Create : pointer to STRUCTURA //создаем и заполняем
var_input  
  h : STRUCTURA;
  pBuf : dword;
  szBuf : byte;
end_var

Create := SysMemAlloc(sizeof(h) + szBuf);  //с хвостиком !!
Create^ := h; //копируем, но в szBuf - шняга
Create^.szBuf := szBuf; //теперь - хорошо
SysMemCpy(Create + sizeof(h), pBuf, szBuf); //и сами данные
---------


---------
function Destroy : bool //уничтожаем, причем размер - в самой структуре
var_input
  pBuf : pointer to STRUCTURA;
end_var

SysMemFree(pBuf,sizeof(pBuf^) + pBuf^.szBuf)); //о хвостике - помним
--------


var 
 S : STRUCTURA;(*Объявил структуру*) 
 x : byte:=0; (*для свитча*)
 buff1 : ...  //тип пофиг
 buff2 : ...  //тип пофиг, и тип buff1 тоже пофиг
 ..
 p : pointer to STRUCTURA; //здесь и вроде нетипизированного указателя
end_var


p := 0; //от игривых рук
case x of
 1: p := Create(s,adr(buff1),sizeof(buff1));
 2: p := Create(s,adr(buff2),sizeof(buff2));
..
end_case


if p > 0 then //от игривых рук
  SysSockSend(Socket,p,sizeof(s) + p^.szBuf,0);
  Destroy(p);
end_if
мелкие ошибки - возможны, исправите сами если юзать будете