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
|
Zaslal: 13. srpen 2009, 12:49:23 Předmět: Pouzivani handle pri tvorbe API |
|
|
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 |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 13. srpen 2009, 12:52:29 Předmět: |
|
|
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 |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 13. srpen 2009, 12:57:40 Předmět: |
|
|
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 |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 13. srpen 2009, 12:59:59 Předmět: |
|
|
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 |
|
 |
|
|
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