.[ ČeskéHry.cz ].
Pouzivani handle pri tvorbe API

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 13. srpen 2009, 12:49:23    Předmět: Pouzivani handle pri tvorbe API Odpovědět s citátem

Proc se nekdy pouziva handle deklarovany treba takhle:
kód:
typedef void *FileHandle_t;

ale nekdy treba zase takhle:
kód:
struct FileHandle_t__ { int unused; }; typedef struct FileHandle_t__ *FileHandle_t

jaky je vtom rozdil a jak se to pak vyuziva?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 13. srpen 2009, 12:52:29    Předmět: Odpovědět s citátem

Můj odhad je, že když je to void*, mohl by si kompilátor myslet, že dva různé handly jsou vlastně stejného typu (void*). Zatímco s tím extra struct se to nestane.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 13. srpen 2009, 12:57:40    Předmět: Odpovědět s citátem

A kdyz uvnitr API pouzivam treba nejakou tridu nebo neco jinyho. Tak dejme tomu vytvorim jeho instanci a pak to prasacky pretypuju na typ toho handle a vratim uzivateli? treba:
kód:

FileHandle_t Open(filename){
return (FileHandle_t)"WINAPI otevreni souboru"
}

Lepsi by bylo mit treba pole otevrenych souboru a index do nej pretypovat na handle a vratit... ale to je celkem jedno uz.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 13. srpen 2009, 12:59:59    Předmět: Odpovědět s citátem

Nejčastěji se to používá úplně bez definice, prostě jen tohle:
kód:
typedef struct FileHandle_t__ *FileHandle_t


Oproti prostému void* je výhoda v tom, že ti kompilátor řekne, pokud popleteš dva různé typy handlů, protože mezi ukazately na dva různé typy nelze implicitně konvertovat, zatímco na void* automaticky upadají všechny typy ukazatelů. A samotnou definici máš pak skrytou v souborech implementace, rovnou s těmi ukazately na potřebnou strukturu pracuješ, není třeba přetypovávat z opaque ukazatele.
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna