Skocz do zawartości

[Delphi] Interfejsowe ciekawostki


Toster

Polecane posty

Witam,

Oto kolejne cudo na ktorym dalem sie zrobic w jajo :)

 

mamy takie cos

 

type
 IMyInterface = Interface
    procedure cosTam;
 end;

 TMojaKlasa = class(TInterfacedObject, IMyInterface)
     procedure   MojeCos;
     procedure   CosTam;
 end;

var
 a: TMojaKlasa;
begin
 a := TMojaKlasa.Create;
 IMyInterface(a).CosTam; 
end;
2Vk7Łzhm'Ł)gz
&jlŁ      -x$'ęixvf0Ą0
i)yŁyfxŚJśghO)^vŹ7v0gęh(n'iłVrŁz\"r3(jĆŁjJ))z*H3\"'ęię,g2Z'q^'
%jqnŻ'(ą6Ś)dĘ#x*,n'ś7Ź+{9h3ĘvŁjrZM0#<\"zlłzx^*n'-jH0jx#z^lŻ<ł'3j79%jĆŚ')óy-źś''Vv'jl^hrz'&s7rĘk9z(ł7ŚjlYĄ0LĘ#hZąŻ<ŚjlŁ{     bąLŹ6''jlxv'3k)Zui'
var
 List: TList;
begin
  List := TList.Create;
  List.Add( TMojaKlasa.Create);
  (List[0] as IMyInterface).cosTam;
end;
gzG\"zĘhśFŚĘvŹ(vŁgM3ĘXN꜌Xi^śaĘ)zśvzśz\"'fóiŹrVŹą)jłiŹq&3'!jŚnWŁ-kjWŚĘ^zxy)ljG^bppDFW&f6VD&ŚV7BĆ7Eł2FW&f6Rć65FÓ

 

i co ? I Bingo, jak narazie wszystko wyglada niezle. Jak sie znowu cos posypie nieomieszkam was poinformowac ;)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

I co w tym dziwnego? Operator "as" i GetInterface z TObject działają poprawnie jeśli zadeklarujesz interfejsy z GUIDem... Ale kto by o tym pamiętał ;)...

 

I tak na przyszłość:

 

Igrasz z ogniem... Zwłaszcza jeśli nie masz swojej implementacji TInterfacedObject. Jak wczoraj pamiętam jaka była czasem jazda w Ambition z interfejsami...

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

GUID nic nie zmienia. W moich interfejsach sa zdefiniowane GUIDy i nie mozna ich zrzutowac na nic co nie dziedziczy po IUnknown.

Co ciekawe w helphie do Delphi nie ma slowa o tym pisze sobie ze uzywa sie o tak:

Object as Interface

 

Mam swoja implementacje InterfacedObject juz od dawna ;)

 

EDIT:

Co wicej nie polecam as, QueryInterface jest chyba jedyna cywilizowana droga. Przy takim czyms

 

TUpdatableObj = class abstract(TUIDObject);
TMultiLinkableObj = class abstract(TUpdatableObj);
TMovePath = class(TMultiLinkableObj, IMultiParent, IShapeMonitor);

x[Łz\"yĘ,ui'
(TMovePath(fMonitors[t]) as IShapeMonitor).PointChanged(index, item.x, item.Y);
([Ły^'&iŚ(ĄQ%Ń=Ą5ŃmŃt%MĄ5ŃAŃ
ĄĄŃŃd(

 

i zapis sie komplikuje :/

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Wszystkie interfejsy dziedziczą po IUnknown. Pewnie gdzieś masz mały błąd.

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Bo widze tu mega niekompetencje w Borlandzie powinna byc za to chlosta publiczna.

Jesli kogos wprowadzilem w blad to sorry posypuje glowe popiolem :D

Anyway pisze na bierzaco co odkrywam i co poprawiam, zmieniam...

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Raczej wątpię w niekompetencję ;) bo interfejsy zostały stworzone do dużo bardziej zaawansowanych rzeczy niż takie "maluczkie" sprawy. Nawet miałem okazję czytać jak to powstawało - chylcie głowy narody świata. Brak dokumentacji o COMach i praca od rana do nocy... Robota cięższa niż wydobywanie węgla.

 

btw. moje marzenie - praca w CodeGear nad Delphi ;).

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Nie zgadzam sie z toba. W Delphi.net dziala to ok w Delphi.win32 jest zbugowane.

Compilator powinien rzucac conajmniej warningiem ze robisz bzdure, zwlaszcza ze rzutowanie na interface w Javie wyglada zupelnie jak rzutowanie na klase i dziala poprawnie.

 

Zeby nie bylo ze tylko ja natknalem sie na to:

http://hallvards.blogspot.com/2005/01/inte...face-casts.html

 

Pozatym mylisz 2 rzeczy:

1) Interfejsy z punktu widzenia Obiektowosci

2) Interfejsy COM

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Nigdzie nie pisałem że COM to to samo co interfejsy w Delphi jako element składni. Brakuje tam jednego zdania :), ale myślałem, że kontekst jest oczywisty (: ale cieszę się, że znasz różnicę.

 

Co do linka to czytałem już wcześniej :P :

"this is not a bug, but a consequence of Win32 hard-cast semantics."

 

no a to plus :)))

 

btw. ten blog wyniszcza

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...