IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

cast avec des objets COM


Sujet :

Visual C++

  1. #1
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut cast avec des objets COM
    Bonjour,
    Dans une application 3D (donc devant avoir le plus de fps possible) je dois faire des cast entre IUknown et IDirect3DResource9 (IDirect3DResource9 étant un type dérivé de IUknown), pour l'instant j'utilise QueryInterface mais bon ça coute pas mal de cycle.

    Qu'est ce que je devrai faire, garder mes QueryInterface, utiliser un c-cast, utiliser les cast c++, lequel?
    Bref je sais pas trop.

    Merci de m'aider.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Je n'ai que des souvenirs lointain mais il me semble que tu ne peux pas faire un cast sauvage. QueryInterface est la solution pour obtenir un pointeur correcte sur l'interface à utiliser.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut
    j'ai trouvé ça sur msdn : http://msdn.microsoft.com/de-de/library/78xw8kzk.aspx

    Note that you must obey Reference Counting rules at all times. If you call Release on an interface pointer to decrement the reference count to zero, you should not use that pointer again. Occasionally you may need to obtain a weak reference to an object (that is, you may wish to obtain a pointer to one of its interfaces without incrementing the reference count), but it is not acceptable to do this by calling QueryInterface followed by Release. The pointer obtained in such a manner is invalid and should not be used. This more readily becomes apparent when _ATL_DEBUG_INTERFACES is defined, so defining this macro is a useful way of finding reference counting bugs.
    et donc je sais pas trop comment le prendre et quoi faire

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Pourquoi ne pas récupérer des "IDirect3DResource9" des API plutôt que des "IUknown" ?

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut
    je vais écrire complètement mon problème :

    dans mon application directx, je manipule des vertex buffers (IDirect3DVertexBuffer9), des index buffers (IDirect3DIndexBuffer9) et vertex declaration (IDirect3DVertexDeclaration9), et je souhaite les stocker dans un seul et unique conteneur stl (dans mon cas vector).

    donc pour les stocker et les récupérer plus tard je cherche la meilleure méthode, tant au niveau sécurité qu'au niveau rapidité.

    pour l'instant j'utilise QueryInterface, mais vu que stock/récupère ces informations plusieurs fois par frame, ça coute pas mal de temps.

    mon problème est peut être un faux problème (un reinterpret_cast et on s'en tamponne de la sécurité) mais je me pose quand même cette question.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Si vous voulez de la sécurité, ne mélangez pas dans une même structure des objets n'ayant pas tous une interface correspondant à l'utilisation des éléments de cette liste (ne pas mélanger les torchons et les serviettes).

    Si vous ne voulez plus de cette sécurité, un simple reinterpret_cast avec une switch et un élément de structure du vecteur stockant le type fera largement l'affaire. Essayez tout de même d'encapsuler ces optimisations dans une structure opaque pour les utilisateurs.

Discussions similaires

  1. Réponses: 21
    Dernier message: 16/09/2013, 22h00
  2. [COM] PHP en communication avec l'objet COM
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 22/05/2012, 14h57
  3. [COM] Problème avec l'objet COM
    Par Commodore dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/05/2006, 20h36
  4. [RPC] Appels distants : remplacer des objets COM
    Par pataguillon dans le forum C++
    Réponses: 26
    Dernier message: 30/03/2006, 09h17
  5. Réponses: 1
    Dernier message: 21/10/2005, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo