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 :

[VC++.net 2003] Probl�me de cast


Sujet :

Visual C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par d�faut [VC++.net 2003] Probl�me de cast
    Bonjour,

    J'ai une fonction fourni par un fabricant de cam�ra, pour afficher un flux vid�o dans une fen�tre MFC:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    errChk(imaq1394Plot((GUIHNDL)hWnd, (void *)ImaqBuffer, 0, 0, AcqWinWidth, AcqWinHeight,CanvasLeft, CanvasTop, plotFlag));
    Le fabricant m'a dit que cette fonction prenait le Handle HWND de ma fen�tre mais qu'il fallait la caster avec:

    Le compilo me dit qu'il n'est pas d'accord, alors j'essai de faire �a plus proprement:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    GUIHNDL hWndTemp;
     
    hWndTemp = reinterpret_cast < GUIHNDL >(hWnd);
    errChk(imaq1394Plot(hWndTemp, (void *)ImaqBuffer, 0, 0, AcqWinWidth, AcqWinHeight,CanvasLeft, CanvasTop, plotFlag));
    r�sultat, toujour le m�me, il me dit :

    'reinterpret_cast': impossible de convertir de 'HWND CmyClasse::*' en 'GUIHNDL'
    la definition de GUIHNDL : typedef uInt32 GUIHNDL
    la definition de uInt32 : typedef unsigned long uInt32

    Est-ce que mon probl�me est un simple soucis de mauvaise d�claration de pointeur ou est-ce qu'il y a une meilleur fa�on pour caster des Handles en MFC?

    merci pour l'aide, je vois le bout du tunnel pour ce projet..

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    'reinterpret_cast': impossible de convertir de 'HWND CmyClasse::*' en 'GUIHNDL'
    Ton hWnd n'est pas un vrai HWND, c'est un HWND * qui ne peut pointer que vers un HWND se trouvant dans un objet CmyClasse.

    Par contre, c'est bizarre que le reinterpret_cast foire. L'un des deux types est peut-�tre bien une classe d'objet complexe, en v�rit�...

    Essaie peut-�tre ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    GUIHNDL hWndTemp;
    HWND hWnd2 = hWnd;
    hWndTemp = reinterpret_cast< GUIHNDL >(hWnd2);
    Normalement, le HWND est d�clar� par:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    DECLARE_HANDLE(hWnd);
    /* qui signifie: */
    typedef struct HWND__ * hWnd;
    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
    Avril 2005
    Messages
    135
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par d�faut
    Voila comment je d�clare mon handle:

    dans la classe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    public:
     
        HWND hWnd;
    Voila comment je lie mon handle � ma fen�tre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    GetDlgItem(IDC_AQUI_IMAGE, &hWnd);
    Essaie peut-�tre ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    GUIHNDL hWndTemp; 
    HWND hWnd2 = hWnd; 
    hWndTemp = reinterpret_cast< GUIHNDL >(hWnd2);
    le r�sultat est tjrs identique:

    'reinterpret_cast': impossible de convertir de 'HWND CmyClasse::*' en 'HWND'
    Je comprends vraiment pas ce qui cloche... �a doit �tre un truc vraiment stupide!!

    merci pour ton aide

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par d�faut
    j'avais pas vue, il y avait un autre message:

    r�f�rence non-conforme � un membre non static 'CmyClasse::hWnd'
    si �a peut t'aider..

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    OK, il me manquait bien la d�claration et la seconde erreur.

    Ces informations me disent que hWnd est une variable d'instance de classe (et non une variable locale � une fonction comme je le croyais) et que tu tentes de l'utiliser depuis une fonction static (une fonction qui n'est donc pas li�e � une instance de classe).

    Donc, pas trente-six solutions: Tu dois d�clarer la fonction non-static ou lui passer l'objet en param�tre.
    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.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par d�faut
    Ok, c bon, merci beaucoup pour ton aide. Comme tu l'a dit, il faut que je puisse acceder � ma variable membre qui n'est pas accessible car je l'appel d'une fonction static Thread. Alors j'ai cr�e un pointeur sur ma classe que j'ai li� � une variable pass� en param�tre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    CmyClasse  *pThis=reinterpret_cast< CmyClasse   *>( pvParam);
    et grace � �a, j'ai accc�s � ma variable hWnd:

    et donc maintenant le cast s'effectu sans soucis:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    (GUIHNDL) pThis->hWnd
    Voil�, merci beaucoup pour le coup de main, �a ma fais drolement avancer.

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    OK, tant mieux

    PS: si pvParam est un void*, tu peux remplacer le reinterpret_cast par un static_cast. Je te conseille de le faire, car il vaut mieux utiliser les casts les plus restrictifs quand on le peut: �a �vite les erreurs...
    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.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VB.NET 2003] Probl�me de Dataset
    Par Kropernic dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 04/09/2007, 14h14
  2. [VB.NET 2003] probl�me de MAJ d'une DB
    Par Kropernic dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 28/08/2007, 10h44
  3. [Visual Studio .Net 2003]Probl�me d'�dition de liens
    Par Mindiell dans le forum Visual C++
    R�ponses: 10
    Dernier message: 25/05/2007, 23h43
  4. R�ponses: 6
    Dernier message: 10/04/2007, 23h50
  5. R�ponses: 2
    Dernier message: 05/05/2006, 15h10

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