В Блэкбоксе, как я понимаю, в параметр типа ARRAY OF BYTE нельзя передать произвольное значение. Другими словами Files.Writer.WriteBytes кушает только ARRAY OF BYTE и для записи строки SHORTCHARов длиной 64K (или двух мегабайтов CHARов, буде таковые появятся) мне предлагается воспользоваться циклом
Ситуация такова:
Имеется процедура
Код:
PROCEDURE (m : Memo) WriteChars* (block : INTEGER; IN val : ARRAY OF SHORTCHAR), NEW;
BEGIN
m.WriteUsedHeader(LEN(val$));
(* а вот тут надо писать строку, желательно побыстрее и желательно за один присест *)
END WriteChars;
Пытался сделать так:
Код:
PROCEDURE (m : Memo) WriteChars* (block : INTEGER; IN val : ARRAY OF SHORTCHAR), NEW;
TYPE bt : POINTER TO ARRAY OF BYTE;
VAR b : bt;
BEGIN
m.WriteUsedHeader(LEN(val$));
b := SYSTEM.VAL(bt, val [параметр не соответствует] );
m.w.WriteBytes(b, 0, LEN(val$))
END WriteChars;
Вот такой вариант работает:
Код:
PROCEDURE (m : Memo) WriteChars* (block : INTEGER; IN val : ARRAY OF SHORTCHAR), NEW;
TYPE bt : POINTER [untagged] TO ARRAY OF BYTE;
VAR b : bt; i : INTEGER;
BEGIN
m.WriteUsedHeader(LEN(val$));
i := SYSTEM.ADR(val[0]) - 16;
b := SYSTEM.VAL(bt, val);
m.w.WriteBytes(b, 0, LEN(val$))
END WriteChars;
Но он мне не нравится потенциальными граблями.
Может быть я чего-то не понимаю и проглядел простое решение?