Маршалинг: передача в массиве строк и чисел
От: dikma  
Дата: 20.03.03 16:01
Оценка:
Имеется СОМ сервер написанный на Дельфи, нужно передать массив данных, состоящий из чисел и строк, с числами проблем нет, чтобы передать строки напрашивается что массив должен быть WideString. А как совместить в одном масиве строки и числа? Пробывал OleVariant, не получилось.

function TServerDM.GetArray: OleVariant;
var
IntArray: array[0..9] of OleVariant;
I: Integer;
PData: PVariant;
VStr: OleVariant;
begin
for I := 0 to 8 do
begin
IntArray[I] := I;
end;
VStr := '123';
IntArray[9] := VStr;

Result := VarArrayCreate([0, SizeOf(IntArray) — 1], varByte);
PData := VarArrayLock(Result);
try
Move(IntArray, PData^, SizeOf(IntArray));
finally
VarArrayUnlock(Result);
end;
end;

при пошаговой отладке все в норме, значение '123' есть в массиве

procedure TMain.GetArrayFromServer;
var
IntArray: array[0..9] of OleVariant;
VStr: OleVariant;
VData: OleVariant;
PData: PVariant;
I: Integer;
begin
VData := ServerDM.GetArray;
PData := VarArrayLock(VData);
try
Move(PData^, IntArray, SizeOf(IntArray));
finally
VarArrayUnlock(VData);
end;
for I := 0 to 8 do
begin
ArrayMemo.Lines.Add(IntToStr(IntArray[I]));
end;
VStr := IntArray[9];
^^^^^^^^^^ значение не определено, здесь появляется ошибка.
end;

Почему она вознивает, если OleVariant позволяет передавать данные WideString?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.