Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Classi in C?

  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    Classi in C?

    Guardate quest'immagine


    E' un fatto che ho notato molto spesso in DirectX e la sua interfaccia COM.
    Sembra prorio che anche le C possano essere usate le classi tramite COM

    L'unica cosa che cambia rispetto ad un normale uso in C++ è il lpVtbl in piu', prima di richiamare la funzione.
    Mi sono messo a cercare un pò e ho scoperto che l'interfaccia in C è obbligata a usare direttamente il riferimento alla vtable per usare tali funzioni.

    Se non erro la vtable è la tavola delle funzioni virtuali che normalmente vengono create in C++
    Ma come possono esistere le vtable in C++?
    se volessi creare una cosa simile, come dovrei procedere?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La VTable C altro non è che una struttura di puntatori a funzioni.

    http://www.aleax.it/TutWin32/r35.htm

  3. #3
    Le i metodi di una classe a linking statico (default) vedono le rispettive call "fissate" dal compilatore poichè conosce l'indirizzo. Quelli a linking dinamico (virtual) non sono chiaramente prestabiliti dal compilatore, quindi per quella classe viene preparata una tavola che raggruppi tutti i metodi virtuali, la vtable. In pratica quindi le vtable le crei indirettamente mentre prepari le dichiarazioni dei metodi delle classi.
    Se vuoi approfondire, ho pubblicato sul mio sito una relazione per un corso universitario che spiega come viene implementata l'ereditarietà multipla in c++. Non è direttamente attinente ma le vtable sono illustrate più nel dettaglio ed anche in riferimento all'ereditarietà singola.

    http://greyfox.imente.org/index.php?id=76

    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Leggerò l'articolo appena avrò un pò di tempo.
    Ciò che cercavo, volevo vedere come implementare una cosa del genere in C, perchè ancora non mi è chiaro come possa "accadere" una cosa del genere.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da XWolverineX
    ancora non mi è chiaro come possa "accadere" una cosa del genere.
    Ancora non mi e' chiaro cosa pensi che accada in C di anormale ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Cos'è Vtable? Una struct di puntatori a funzioni?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    In C++, questo e altro. Non contiene solo i puntatori a funzioni, ma anche gli offset da sommare al puntatore all'oggetto per passare alla funzione un "this" che sia del tipo che si aspetta ed altro ancora.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    in C però è solo una struct di puntatore a funzione?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Il mio "in C++" era per dire che non so negli altri linguaggi come siano fatte.
    In C non mi risulta che esistano. Dal momento che non esistono classi in C non ha senso avere tabelle dei metodi virtuali. Quel codice C che si vede nell'immagine che hai postato probabilmente cerca di utilizzare qualcosa in C++, o forse simula "manualmente" le classi (il meccanismo base che gestisce le gerarchie di classi è - anche se molto scomodamente - implementabile in C).
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da GreyFox86
    il meccanismo base che gestisce le gerarchie di classi è - anche se molto scomodamente - implementabile in C
    Con una struct di puntatori a funzione?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.