Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    C - QueryInterface su COM

    Studiando DirectX9 e 10 mi è capitato di dover imparare un po di COM, ma sinceramente ho ancora profondi dubbi su questa "piattaforma di programmazione".

    Ho notato che molti oggetti (dato che derivano da IUnknown) hanno QueryInterface, Release e AddRef

    Ora Release è chiaro, rilascia la memoria, AddRef aumenta il conteggio delle referenze (e quindi? cosa devo farci io con questo metodo? Il conteggio non lo porta in automatico?)

    QueryInterface
    Questo qui a quanto vedo permette di avere delle interfacce da determinati metodi, passandogli l'uuid e un puntatore a void*

    4 Domande:
    1) Perchè per alcune interfacce posso fare dev->CreateOggetto(Parametri,parametri);
    e per altri invece sono costretto a usare QueryInterface? Non è la stessa cosa? (QueryInterface non può ricevere altri parametri, vero, ma perchè usare 2 sistemi)
    E CoCreateInstance invece, a cosa serve?

    2) Se ho 2 classi posso chiedere a entrambe lo stesso oggetto?
    codice:
    dev->QueryInterface(__uuidof(Classe),&ptr);
    cls->QueryInterface(__uuidof(Classe),&ptr);
    Funzionerà lo stesso o solo alcune classi possono cacciare determinati oggetti?

    3) Se volessi effettuare un approccio molto simile...come devono essere implementate Release, QueryInterface e AddRef? e i guid? come li creo?

    4) Perchè alcune funzioni chiedono dei puntatori e parametri inutilmente?

    codice:
            HRESULT CoInitialize(
      LPVOID pvReserved
    );
    Dalla documentazione
    pvReserved
    [in] Reserved; must be NULL
    Se è riservato e già sanno che è NULL, perchè chiedono questo parametro? E questo è solo un esempio, in D3D10 ci sono delle funzioni (tipo Apply(0) di ID3D10EFFECT) che nella documetnazione dice NotUsed, set 0

    Perchè?
    "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
    Non so quanto questo articolo ti chiarirà le idee.
    http://www.eptacom.net/pubblicazioni/pub_it/objcom.html

    L'unico COM che ho usato è stato msxml6 ed è stata un pò un'avventura.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Io li sto usando in modo indiretto per mezzo di D3D10
    "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

  4. #4
    Premessa: su COM non sono molto ferrato, per cui prendi con le pinze quello che ti dico.
    AddRef/Release lavorano con il reference counter; ogni volta che chiami AddRef il reference counter viene incrementato di 1, ogni volta che richiami Release esso viene diminuito di 1. Quando il reference counter raggiunge lo zero l'oggetto viene distrutto. Di solito quando una funzione ti restituisce un puntatore ad un'interfaccia COM il suo reference counter è già ad 1 (o ad un numero maggiore, a seconda di quanti riferimenti ci sono a questo oggetto), per cui l'unica cosa che devi fare è richiamare Release quando l'oggetto non ti serve più. Se per caso l'oggetto ti dovesse servire in due parti indipendenti del programma puoi chiamare AddRef una volta in modo da incrementare di uno il reference counter e Release in entrambe le parti del programma, così che l'oggetto venga distrutto quando non serve più a nessuno.
    4) Per poter espandere le funzioni in futuro senza rompere la compatibilità con il codice esistente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Oregon?
    "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

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    nessuno ha esperienze con COM?
    "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
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Riportiamo up questo topic con un bel salto

    "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

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    http://www.aleax.it/TutWin32/tc.htm

    Cap. 35, 36, 37.
    Dovrebbe fare al caso tuo.

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.