Текущий архив: 2007.05.13;
Скачать: CL | DM;
Вниз
Динамическая линковка интерфейсов Найти похожие ветки
← →
Midnighter © (2007-03-18 19:16) [0]Здравствуйте,
Вопрос следующий: как корректно привести указатель неопределенного вида к определенному интерфейсу? При єтом указатель указывает на класс который поддерживает нужный интерфейс.
Пример кода:
IMyInterface = interface (IInterface)
...
end;
TObject1 = class (TInterfacedObject, IInterface)
...
end;
TObject2 = class (TInterfacedObject, IInterface)
...
end;
Далее, хочу привести указатель к интерфейсу, например:
Var
Item: IMyInterface;
Ptr: pointer;
...
Ptr := TObject1.Create;
Item := TInterfacedObject(Ptr) as IMyInterface;
// не работает. Ошибка "Интерфейс не поддерживается"
Item := IMyInterface(Ptr);
// не работает. Access violation
Спасибо
← →
Kolan © (2007-03-18 19:37) [1]> Item := TInterfacedObject(Ptr) as IMyInterface;
> // не работает. Ошибка «Интерфейс не поддерживается»
А что TInterfacedObject реализует IMyInterface? Да и TObject1 и TObject2 тоже его не реализуют…
← →
Midnighter © (2007-03-18 19:42) [2]Сорри, код такой:
TObject1 = class (TInterfacedObject, IMyInterface)
...
end;
TObject2 = class (TInterfacedObject, IMyInterface)
...
end;
А TInterfacedObject по идее тут не должен реализовывать IMyInterface, это ведь и есть динамическая связка.
И код заработал, нужно было корректный GUID моему интерфейсу прописать
Спасибо :-)
← →
Kolan © (2007-03-18 19:53) [3]> корректный GUID
Врядли в этом дело, хотя …
← →
Ант (2007-03-18 20:23) [4]разумеется AS работает только в том случае ,если есть корректный гуид
иначе даже не скомпилится
Страницы: 1 вся ветка
Текущий архив: 2007.05.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.039 c