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

C++ Discussion :

interface COM / manipulation de pointeurs


Sujet :

C++

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Par défaut interface COM / manipulation de pointeurs
    Bonjour,

    voilà j'ai un problème de manipulation de pointeurs...

    Voici la déclaration des fonctions d'une classe C++:
    //Obtains the virtual address of one of the driver managed system buffers.
    Berr system_buffer_map(void** ppAddress, int BufferId);
    //Assign an arbitrary usermode buffer to a particular DMA function.
    BErr system_buffer_assign(void* pAddress, unsigned long Id, unsigned long Length, unsigned long Target);
    Et ce code fonctionne sans problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void * m_Buffers[2];
    mpSDK->system_buffer_map(&m_Buffers[0], BUFFER_ID_VIDEO0);
    mpSDK->system_buffer_map(&m_Buffers[1], BUFFER_ID_VIDEO1);
    mpSDK->system_buffer_assign(m_Buffers[0], BUFFER_ID_VIDEO0, mGolden, BUFFER_TYPE_VIDEO);
    mpSDK->system_buffer_assign(m_Buffers[1], BUFFER_ID_VIDEO1, mGolden, BUFFER_TYPE_VIDEO);
    Maintenant je veux utiliser l'objet COM. L'interface est la même que la classe C++ à quelques exceptions près :
    The COM object is a simple wrapper of the original C++ implementation
    The only difference between the class and interface is in the way the parameters are passed in COM. The differences are as given below.
    - All unsigned long parameters in C++ have been changed to long in COM Object.
    - Reference parameters in the C++ Class has been changed to OUT Parameters in the COM Interface.
    - The Pointer to Pointer parameters in the C++ Class has been implemented in a different way in the COM Interface. The address of the requested memory location is passed back to the caller as a long value.
    Donc voici la déclaration des fonctions dans l'interface COM
    Berr system_buffer_map(long* ppAddress, int nBufferId);
    BErr system_buffer_assign(long* pAddress, long Id, long Length, long Target);
    Comment convertir le code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void * m_Buffers[2];
    mpCOM->system_buffer_map(???, BUFFER_ID_VIDEO0);
    mpCOM->system_buffer_map(???, BUFFER_ID_VIDEO1);
    mpCOM->system_buffer_assign(???, BUFFER_ID_VIDEO0, m_Golden, BUFFER_TYPE_VIDEO);
    mpCOM->system_buffer_assign(???, BUFFER_ID_VIDEO1, m_Golden, BUFFER_TYPE_VIDEO);
    Merci pour vos réponses car je suis un peu perdu. En général, quoique je fasse, mon programme explose.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void * m_Buffers[2];
    mpCOM->system_buffer_map(reinterpret_cast<long *>(&m_buffers[0]), BUFFER_ID_VIDEO0);
    mpCOM->system_buffer_map(reinterpret_cast<long *>(&m_buffers[1]), BUFFER_ID_VIDEO1);
    mpCOM->system_buffer_assign(reinterpret_cast<long *>(&m_buffers[0]), BUFFER_ID_VIDEO0, m_Golden, BUFFER_TYPE_VIDEO);
    mpCOM->system_buffer_assign(reinterpret_cast<long *>(&m_buffers[1]), BUFFER_ID_VIDEO1, m_Golden, BUFFER_TYPE_VIDEO);
    PS: ça ne marchera qu'en 32bits, mais vu que c'est en 32bits qu'on développe la plupart du temps...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Par défaut
    Merci beaucoup Médinoc, ça marche parfaitement. Trop content.
    Je n'ai pas pris le temps de te remercier avant car j'ai des tests tout l'après midi...
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de pointeur sur une interface COM
    Par thierrybo dans le forum Débuter
    Réponses: 0
    Dernier message: 28/09/2010, 20h47
  2. Pointeur d'interface COM
    Par pompomthebest dans le forum WinDev
    Réponses: 4
    Dernier message: 13/03/2008, 11h37
  3. RTTI:Lister les propriétés d'une interface COM
    Par zeprogrameur dans le forum Langage
    Réponses: 10
    Dernier message: 09/11/2005, 16h06
  4. en COM Tableaux de pointeurs d'interface:
    Par Barahn dans le forum MFC
    Réponses: 11
    Dernier message: 30/09/2005, 16h42
  5. Réponses: 9
    Dernier message: 03/03/2005, 14h36

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