[Object pascal, FPC] Když chci nacpat instanci rozhraní do TObject, řve to, že to není kompatibilní typ. Nemůžu na tom ani volat free(). Má toto chování nějaké logické opodstatnění? Jak se pak mám vyhnout zbytečným varováním ohledně přetypování na TObject?
EDIT: Jinak TObject(instanceRozhrani).free() způsobí access violation :-(
Fórum › Pascal
Může být instance rozhraní něcím jiným než TObject-em?
Jestli si to dobře pamatuju (za což neručím), dědí se rozhraní (interface) ze základního typu iinterface a ne tobject. Čili dva naprosto nepříbuzné rodokmeny.
Moje stránka.
Měl jsem chybu s mailem, takže jsem nevěděl o nových odpovědích.
Myslel jsem si, že když znám rozhraní v Javě a PHP, tak mě zde Pascal už nemá čím překvapit. Už jsem to asi pochopil:
* (Object)Pascal umožňuje používat rozhraní i z DLL mimo (Object)Pascal, který opravdu nejsou instancí TObjectu
* Nemůžu nijak přetypovat ani zjistit typ rozhraní -> třída. třída->třída, rozhraní -> rozhraní i třída->rozhraní je OK.
* Pro volání metod rozhraní potřebuju třídu přetypovat na rozhraní.
* Pro rozhraní se používá GC (refcounting). Proto toto spadne:
program GCErr;
procedure foo(x:IInterface);
begin // x: zvýšení počtu referencí 0 -> 1
end; // x: snížení počtu referencí 1 -> 0 => úklid
var x:TInterfacedObject;
begin
x := TInterfacedObject.create();
foo(x);
x.free();// uvolňování uklizené proměnné => chyba
end.
* Pro některé operace (supports, as) musí mít rozhraní GUID.
* možná ještě něco
To v6ak :
* Pro volání metod rozhraní potřebuju třídu přetypovat na rozhraní.
Instance třídy se nepřetypovává, ale volá se GetInterface, který vrátí požadované rozhraní. Tuhle metodu používá i implementace IUnknown.QueryInterface, která potřebuje GUID.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Náhrada iframe něčím jiným — založil Kall_Ell
Může být??? Rozvětvení a organizace diskuze Python — založil TazDevil
Náhrada znaku jiným — založil Zechy
Moderátoři diskuze