Mixer du c et du C++
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Mixer du c et du C++



  1. #1
    Slimounet45

    Mixer du c et du C++


    ------

    Bonjour à tous,

    Je dois accéder à une fonction C++ "GetDlgItemText" depuis une fonction C.
    J'ai désactivé dans les propriétés du fichier écrit en C la fonction "Precompiled headers".
    Quelqu'un saurait-il comment faire ?
    Merci par avance pour vos réponses.


    PS:
    J'utilise Visual C++ 6.0.

    -----

  2. #2
    invite6de5f0ac

    Re : Mixer du c et du C++

    Bonsoir,

    Est-ce que tu as pensé à une déclaration du genre
    Code:
    extern "C" GetDlgItem (...) ;
    Ce n'est pas la méthode la plus subtile mais elle est supposée être portable d'une plate-forme à l'autre.

    -- françois

  3. #3
    Slimounet45

    Re : Mixer du c et du C++

    Merci François pour votre réponse.

    Je n'y ai pas pensé mais je viens d'essayer et ca ne marche pas. En effet, GetDlgItemText necessite Afxwin.h. Lors de a compilation, VC++ signale une erreur et indique qu'il faille utiliser cette fonction dans fichier portant l'extension .cpp et non pas .c . Dommage.

    L'idée c'est d'utiliser les fonction MFC à partir de source écrite en C.
    SalutationS.

  4. #4
    invite6de5f0ac

    Re : Mixer du c et du C++

    Bonsoir,

    Le problème vient du fait que la fonction peut être surchargé en C++ mais pas en C. Pour remédier à cela, encapsuler les fonctions C++ dans des fonctions C, et compiler séparément les deux. Par exemple s'il y a deux prototypes:
    Code:
    int GetDlgItem (int, int) ;
    int GetDlgItem (int) ;
    on peut faire:
    Code:
    int GetDlgItem_1 (int, int) { return GetDlgItem (...) ; }
    int GetDlgItem_2 (int) { return GetDlgItem (...) ; }
    et ensuite on fait un fichier .h avec
    Code:
    extern "C" GetDlgItem_1 (int, int) ;
    extern "C" GetDlgItem_2 (int) ;
    Mais d'accord que ce n'est pas très joli.

    -- françois

  5. A voir en vidéo sur Futura
  6. #5
    Slimounet45

    Re : Mixer du c et du C++

    François,

    Je suis d'accord et justement pendant que vous répondiez à ce post, j'essayé de mettre en oeuvre votre solution. Justement, je but . J'essaye d'accéder à une fonction d'un fichier .cpp et j'ai des pbs de compilation dont voiçi l'erreur:
    "MFC requires C++ compilation (use a .cpp suffix)"
    J'ai beau essayer d'inclure le .h du fichier .cpp mais rien à faire !!
    Auriez-vous une idée pour résoudre ce pb ?
    Encore merci de donner de votre temps .

  7. #6
    invite6de5f0ac

    Re : Mixer du c et du C++

    Hmmm... Il y a à la fois une question de compilateur et de linker. Je regarde ça de plus près, mais pour le moment je ne vais pas tarder à aller dîner, alors il faudra attendre un peu.

    Sinon j'utilise Borland C++ Builder, qui n'est déjà pas très commode pour ce genre de choses. En revanche, pour appeler du C depuis le C++, c'est très facile. J'avais aussi Visual C++ Express, mais ma licence est expirée, sinon j'aurais bien regardé directement dans VC++.

    Je pense néanmoins que les deux systèmes doivent être assez similaires.

    -- françois

  8. #7
    Slimounet45

    Re : Mixer du c et du C++

    Je sais appeler des fonction C depuis le C++.
    Par contre, du C vers C++ c'est une paire de manche.
    Je fais ceci car j'ai des fichiers écrite en C (fourni lors de l'achat d'une caméra) et je voudrais utiliser VC++ que je connais déjà. J'espère y arriver au plus tôt.
    Je vous laisse. Je vais aussi diner.
    Bon diner quand même et à demain.
    Bonne soirée françois.
    Salutations.

  9. #8
    invite7a8ce750

    Re : Mixer du c et du C++

    Citation Envoyé par Slimounet45 Voir le message
    Je sais appeler des fonction C depuis le C++.
    Par contre, du C vers C++ c'est une paire de manche.[...]
    Tu veux dire du C++ depuis le C ??

    Sinon je comprends de moins en moins.

    Bon sinon pourquoi ne pas réécrire la fonction C++ en C puisque tu as les sources ? Au moins tu serais sur de son contenu ?

  10. #9
    Slimounet45

    Re : Mixer du c et du C++

    Bonjour Gre et merci pour ton post.

    Puisque tu n'as pas tout compris (peut-être me suis-je mal exprimé) je vais détaillé par du code. L'idée c'est que
    TC5747_Init() affiche un texte dans edit box ( ex: essai) via GetDlgItemText.

    J'ai une classe (C++) CCAM de type CFormView dans CAM.cpp:

    void CCAM::OnInitCamI2c()
    {
    TC5747_Init(); //fonction écrite en C
    }

    et TC5747_Init() qui se trouve dans CAM_init_template.c:

    void TC5747_Init( void )
    {
    CCAM_TC5747 cam;
    cam.GetDlgItemText(IDC_UPLOAD_ FIRMWARE,"essai");
    }

    en faisant #include "CAM.h" dans CAM_init_template.h, j'ai "error C2065: 'CCAM_TC5747' : undeclared identifier" comme erreur.
    En espérant avoir été un peu plus clair.
    Salutations de France (pour Gre).

  11. #10
    invite6de5f0ac

    Re : Mixer du c et du C++

    Bonjour,

    Là j'y vois un peu plus clair. Mais désolé, j'ai essayé hier soir de réactiver ma licence Visual C++ Express mais il ne veut rien savoir... Je vais quand même regarder de plus près. Tu n'as pas des options de compilation pour empêcher le "mangling" des identificateurs?

    -- françois

  12. #11
    invite79115743

    Re : Mixer du c et du C++

    GetDlgItemText est une fonction de user32.dll que tu peux utiliser en incluant simplement <windows.h>, pas besoin de passer par des classes C++.

  13. #12
    Slimounet45

    Re : Mixer du c et du C++

    Merci François et DarKPhoeniX.

    François:
    je ne sais pas si VC++ peut empêcher le mangling.

    DarKPhoeniX:
    Effectivement, je peut utiliser GetDlgItemTxt. C'est ce que je fais depuis 2 bonnes heures. En fait, c'est SetDlgItemText que je veux utiliser. Erreur de frappe.
    Je n'arrive pas à transmettre le pointeur this de ma classe CCAM afin d'avoir le m_hWnd coorespond à ma fenêtre.
    J'ai essayé le code suivant mais rien à faire:

    void TC5747_Init( LPVOID pthis)
    {
    SetDlgItemText(pthis->m_hWnd,IDC_UPLOAD_FIRMWARE,"e ssai");
    ...
    }

    Même si je récupère le handle de ma fenêtre, je sais que j'aurais un pb pour accéder au bon edit box (IDC_UPLOAD_FIRMWARE).

    Merci encore pour votre aide.

  14. #13
    Slimounet45

    Re : Mixer du c et du C++

    J'ai oubié de donner les erreurs de compilation:

    error C2227: left of '->m_hWnd' must point to class/struct/union

    error C2065: 'IDC_UPLOAD_FIRMWARE' : undeclared identifier

  15. #14
    invite6de5f0ac

    Re : Mixer du c et du C++

    Bon, pour l'erreur C2227 au moins c'est clair: ton pthis est un LPVOID, c'est-à-dire un pointeur non typé. Tu ne peux donc pas le déréférencer, et encore moins t'en servir pour accéder à un champ de structure. Un bon vieux cast devrait arranger ça.

    -- françois

  16. #15
    Slimounet45

    Re : Mixer du c et du C++

    François,

    Je sais qu'il faut faire un cast mais avec quel type ?
    Si je transmet en paramètre le handle de fenêtre je résoud la première erreur, reste la seconde:
    void TC5747_Init( HWND phWnd/*LPVOID pthis*/)
    {
    SetDlgItemText(phWnd,IDC_UPLOA D_FIRMWARE,"essai");
    ...
    }

  17. #16
    invite6de5f0ac

    Re : Mixer du c et du C++

    Déjà avec un HWND c'est plus propre, si ça suffit tu peux à mon avis continuer comme ça.
    Pour le IDV_UPLOAD_FIRMWARE non déclaré, je soupçonne qu'il doit manquer un #include quelque part. Ce genre de "constante" est le plus souvent un enum, déclaré dans un fichier .h, mais lequel?

    -- françois

  18. #17
    invite79115743

    Re : Mixer du c et du C++

    Il faut que ta constante IDC_UPLOAD_FIRMWARE soit déclarée dans le fichier que tu compiles, ou dans l'un des fichiers qu'il inclus.

  19. #18
    Slimounet45

    Re : Mixer du c et du C++

    Ca marche enfin. J'ai oublié d'inclure le fichier "resource.h".
    Je pense que le mieux sera de faire ainsi (transmettre le HWND).
    Merci sincèrement pour votre aide. Nous pouvons clore ce post.
    Bonne continuation.
    Sincères salutations.

Discussions similaires

  1. Est-ce pertinent de mixer des isolants différents ?
    Par invite640e8c7f dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 14
    Dernier message: 05/04/2016, 22h08
  2. Transformer du mono en stereo, puis mixer en stereo
    Par invite1cb2e007 dans le forum Électronique
    Réponses: 4
    Dernier message: 24/11/2006, 10h49
  3. Mixer
    Par fred1599 dans le forum Dépannage
    Réponses: 1
    Dernier message: 26/06/2005, 14h30
  4. oscillateur gunn et 'mixer diodes'
    Par invite56517f19 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/03/2004, 09h57
  5. Mixer le C et l'assembleur avec IAR dans un fichier source
    Par invite0e1ebad6 dans le forum Électronique
    Réponses: 4
    Dernier message: 14/01/2004, 17h36
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...