Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, dikma, Вы писали:
GS>>>Если массив вариантов, то
D>>>> IntArray: array[0..9] of OleVariant;
GS>>>и этот массив тоже должен быть массив вариантов.
D>>>> Result := VarArrayCreate([0, SizeOf(IntArray) — 1], varByte);
D>> ^^^^^^^ этот массив?
D>>уточните пожалуйста какой.
GS>>>...
D>>>> Move(IntArray, PData^, SizeOf(IntArray));
GS>Ты создаешь массив Result (VarArray, что SAFEARRAY, полагаю), определяешь его как массив varByte. Далее ты берешь масив OleVariant (обычный) и бинарно копируешь его в секцию данных массива Result. Типы должны совпадать.
Тогда вопрос еще более конкретнее, может чего я не недопонимаю, но...
var
IntArray: array[0..9] of OleVariant;
I: Integer;
PData: PVariant;
begin
for I := 0 to 9 do
begin
IntArray[I] := 'a';
end;
Result := VarArrayCreate([0, SizeOf(IntArray) — 1], varVariant);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PData := VarArrayLock(Result);
try
Move(IntArray, PData^, SizeOf(IntArray));
finally
VarArrayUnlock(Result);
end;
Я так понимаю типы совпадают, при попытке создать массив получаем "Could not convert variant of type (Array variant) into type (OleStr)". Вопрос, так какого типа должен быть создаваемый массив и IntArray?