Это может оказаться сложным - я использую несколько интерфейсов CORBA для объекта, поэтому это выглядит примерно так:
TBaseObject = class(TSuperBaseObject, IInterfaceA)
function Afunction; // implemented from IInterfaceA
end;
TOtherObject = class(TBaseObject, IInterfaceB);
function Bfunction; // implemented from IInterfaceB
end;
Теперь у меня есть функция, которая принимает вариант, и если этот вариант является объектом, он предполагает, что этот объект является объектом IInterfaceA:
case var.vtype of
...
vtObject : begin
Something := (var.vObject as IInterfaceA).AFunction; (1)
end;
end;
Теперь, когда я запускаю этот код и передаю TOtherObject функции, в строке (1) вызывается BFunction с принудительными параметрами!
Я что-то не так делаю или это ошибка в компиляторе? Кроме того, есть ли вменяемый способ обойти это без изменения структуры классов?
Полный код EAccessViolation, если кто-то хочет попробовать - http://pastebin.com/D7sDpDHx