Re[4]: Маршалинг: передача в массиве строк и чисел
От: dikma  
Дата: 21.03.03 07:05
Оценка:
Здравствуйте, 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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.