Im пытается получить OleVariant «массив объектов» У меня есть этот код на С ++, которые делают эту работу, но я не смог злословить его в Дельфы кодOleVariant на массив объекта
VARIANT vComps;
HRESULT hr = swAssembly->GetComponents(VARIANT_TRUE, &vComps);
IDispatch* HUGEP *pDispData;
HRESULT hr = SafeArrayAccessData(vComps.parray, (void**)&pDispData);
long bound = 0;
hr = SafeArrayGetUBound(vComps.parray, 1, &bound);
for (int i = 0; i < count; i++)
{
IComponent2 *nextComp = NULL;
hr = pDispData[i]->QueryInterface(IID_IComponent2, (void**)&nextComp);
//do stuff with Component pointer
}
Stijn Sanders предложить мне этот перевод:
var
vComps:OleVariant;
i:integer;
comp:IComponent2;
begin
swAssembly.GetComponents(true,vComps);
for i:=VarArrayLowBound(vComps,1) to VarArrayHighBound(vComps,1) do
begin
comp:=IUnknown(vComps[i]) as IComponent2;
//do stuff with component
end;
но функции были импортированы из файла tbl.
swAssembly.getComponents(const toplevelonly:boolean)
и 'getcomponents' имеет только один параметр, то я не могу сделать
swAssembly.GetComponents(true,vComps);
я попытался
vComps:=swAssembly.getComponents(true);
с vComps как OleVariant типа (поскольку компилятор позволяет только этот тип) Ошибка при выполнении этой строки, но когда я пытаюсь читать vComps
Icom ponent2 (vComps [я])
я есть ошибка доступа ... я попытался небезопасный, но я их обнаружить и у меня есть некоторые трудности ...
-1 Вы уже задавали этот вопрос. Стейн провел свое драгоценное время, написав ответ. Затем вы удалили вопрос, что сделало невозможным вознаграждение Стийна за его усилия. Это очень плохие манеры. –
Большое спасибо Stijn Sanders! Но я думаю, что предыдущее сообщение было заблокировано вами, «приостановлено как не по теме», и я создал это новое, а не редактирование. Сожалею. Это мой первый вопрос о переполнении стека ... – Tokazio
Да, приостановлено. Какая очередь для вас, чтобы отредактировать ее и устранить ее недостатки. Чтобы его можно было снова открыть. –