![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическая линковка интерфейсов [D7, WinXP]
Midnighter © (2007-03-18 19:16:00)Здравствуйте,
Вопрос следующий: как корректно привести указатель неопределенного вида к определенному интерфейсу? При єтом указатель указывает на класс который поддерживает нужный интерфейс.
Пример кода:
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
Спасибо
Ант (2007-03-18 20:23:00) [1]разумеется AS работает только в том случае ,если есть корректный гуид
иначе даже не скомпилится
Kolan (2007-03-18 19:53:00) [2]> корректный GUID
Врядли в этом дело, хотя
Midnighter (2007-03-18 19:42:00) [3]Сорри, код такой:
TObject1 = class (TInterfacedObject, IMyInterface)
...
end;
TObject2 = class (TInterfacedObject, IMyInterface)
...
end;
А TInterfacedObject по идее тут не должен реализовывать IMyInterface, это ведь и есть динамическая связка.
И код заработал, нужно было корректный GUID моему интерфейсу прописать
Спасибо :-)
Kolan (2007-03-18 19:37:00) [4]> Item := TInterfacedObject(Ptr) as IMyInterface;
> // не работает. Ошибка «Интерфейс не поддерживается»
А что TInterfacedObject реализует IMyInterface? Да и TObject1 и TObject2 тоже его не реализуют