Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Вниз

delphi отказывает в приведении типа. Почему?   Найти похожие ветки 

 
deffer   (2002-10-24 18:10) [0]

есть переменная form типа TForm.

var form : TForm;

реально хранит объект класса, порожденного от TForm и реализующего IMyInterface. Попытка обратиться к form как к объекту с интерфейсом IMyInterface

IMyInterface(form).myMethod;

отбрасывается компилятором. Ошибка : Incompatible types "IMyInterface" and "TForm".

Delphi 5. Это глюк или этому есть разумное объяснение?


 
asmith   (2002-10-24 20:04) [1]

Нужно это делать таким образом:
var
mi : IMyInterface;
...
if form.GetInterface(IMyInterface, mi) then
mi.myMethod;


 
Набережных С.   (2002-10-24 20:07) [2]

Это глюк, но не в DELPHI :). Компилятор пытается найти в классе TForm интерфейс IMyInterface, а откуда ему там взяться? А то, что ты там собираешься хранить ссылку на объект другого класса - твое глубоко личное дело, компилятор это не волнует


 
deffer   (2002-10-24 21:04) [3]

to : asmith


> var
> mi : IMyInterface;
> ...
> if form.GetInterface(IMyInterface, mi) then
> mi.myMethod;


getInterface возвращает false. у меня не COM-овский интерфейс. у меня обычный интерфейс в терминах ООП. может в этом дело?

to All :
может кто чего посоветует? Ситуация вполне типична (часто используется например в Java)

TMy1Class = class (TForm, IMyInterface)
TMy2Class = class (TForm, IMyInterface)
...
TMy10Class = class (TForm, IMyInterface)

IMyInterface = interface
procedure myMethod;
end;

где-то инициализиурется переменная form объектом TMyXForm, где X зависит от разных параметров
например form:=TMy3Form.create(self);

в каком-то месте кода мне нужно получить доступ к form как к TForm так и как к IMyInterface (причем какой точно объект лежит в form мне уже неизвестно, но он точно один из My1Form .. My10Form), т.е. нужно выполнить

TForm(form).showModal;
IMyInterface(form).myMethod;

если объявить var form:TForm, то нельзя привести form к IMyInterface.
если объявить var form:IMyInterface, то вываливается с эксепцией (EPrivilege или EExternalException) приведение к TForm.

Так в чем дело? Delphi не поддерживает такое приведение типов, или это делается как-то по-хитрому?


 
Набережных С.   (2002-10-24 21:43) [4]

Нельзя интерфейс привести к типу объекта, нет для этого средств, и это вполне естественно и разумно. А смешивать работу с объектом и интерфейсом не стоит даже в такой редакции, как у тебя. Добавь в интерфейс метод GetSelf и объяви переменную типа интерфейса. И кто мешает дать интерфейсу GUID?


 
deffer   (2002-10-25 11:33) [5]

to: Набережных С.

Спасибо за идею с getSelf. Как это мне раньше в голову не пришло.

PS: А по поводу давания GUID -- я же говорю, не получается что-то. getInterface возвращает false. Вероятно с GUID-ом делается как-то не так, как я делаю.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
1-11199
Sego
2002-10-24 19:58
2002.11.04
чтение открытого текстового файла.


1-11293
dihlos
2002-10-22 19:54
2002.11.04
Скрыть свойства в инспекторе объектов


7-11522
Eugene
2002-08-30 01:16
2002.11.04
Удаленная установка своей программы.


6-11377
Grande
2002-08-30 12:24
2002.11.04
Как прослушать порт?


14-11440
Cr@sh
2002-10-15 14:45
2002.11.04
Ответьте на простой вопросик...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский