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++/CLI Discussion :

Utiliser une classe C++ dans un projet C++/CLI


Sujet :

C++/CLI

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut Utiliser une classe C++ dans un projet C++/CLI
    Bonjour à tous,

    Je pense que je poste au bon endroit (enfin j'espère...).
    Voilà le problème : J'ai un projet en C++ utilisant la technologie Dotnet. Pour le moment il s'agit de quelque chose de tout simple.
    A côté de ça, j'ai une classe écrite en C++ "classique" : soit un fichier .h et un .cpp.
    Je voudrais pouvoir créer un objet de ma classe dans mon appli Dotnet. Pour le moment j'ai testé en ajoutant les deux fichiers sources à mon appli mais sans même instancier d'objet, le programme compile mais plante à l'exécution avec une erreur du style :

    Debug Assertion Failed!

    Program: [...]MonAppli.exe
    File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c

    Expression: _CrtIsValidHeapPointer(pUserData)
    Il y a p-e quelque chose de spécial à faire mais je vois pas trop...

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    Bon... Du coup je vois pas bien ce qui cloche... J'ai suivi ceci : http://nico-pyright.developpez.com/t...c2005/interop/

    J'ai donc une appli C++/CLI en mode de compilation mixte (/clr). Il s'agit d'une appli graphique (je sais pas si ça peut changer qque chose, on sait jamais).
    Dans ce projet, j'ajoute ma classe C++ (le .cpp et le .h).

    Puis dans mon Form1.cpp, j'ajoute simplement #include "maclasse.h"

    Et toujours le même message d'erreur.

    Pire encore, même en commentant le #include l'erreur est toujours là. Et pas moyen de débugger vu que cette erreur intervient avant même l'appel au main()...

    Une idée?

    PS : la classe que j'ajoute fonctionne très bien, elle est utilisée dans des projets C++ classique sans problèmes.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    Bon, un peu de nouveau après y avoir passé quelques heures :

    Il semblerait que ce soit le #include <atltime.h> qui soit à l'origine de tout ça...

    Du coup, je veux bien l'enlever mais j'utiliser deux _T() dans mon programme... Pour cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hResult = ptrSchemaCache->add(_bstr_t( _T("http://www.topografix.com/GPX/1/1")), _variant_t( _T("D:\\gpx.xsd")));
    Y'a-t-il une alternative à ça de façon à virer cet include?
    Et est-ce que quelqu'un à une idée du pourquoi du comment de ça?

    PS : il semblerait que #include <atlstr.h> fasse la même chose... Donc j'imagine qu'il y a un rapport avec ATL...

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    Bon, je continue de m'auto-répondre

    Une fois le problèmes des headers ATL résolus, il semble que tout ceci vienne des "types" _bstr_t et _variant_t...

    Je testerai donc ça demain matin... Celà dit c'est quand même un peu étrange (et un peu n'importe quoi )!!!

    Si quelqu'un a une explication plausible à cela je suis preneur!

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    Bon et bien c'est finalement résolu après deux jours passés dessus...

    Pour résumer un peu ce qui ne fonctionnait pas (et je ne sais toujours pas pourquoi mais enfin...) :

    • Les headers ATL
    • Les _bstr_t et _variant_t
    • Et enfin, sans que ça fasse planter le programme mais ça ne fonctionnait pas quand même : l'utilisation de msxml6 via l'import de la DLL. J'ai du modifier mon code pour utiliser msxml6 via le .h et le .lib...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/12/2012, 03h26
  2. Utiliser une classe personnelle dans un vector
    Par Mindiell dans le forum SL & STL
    Réponses: 16
    Dernier message: 01/03/2007, 17h42
  3. Réponses: 1
    Dernier message: 09/09/2006, 21h52
  4. [COM] Comment utiliser une dll DotNet dans un projet win32 ?
    Par Marmottoc dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 05/05/2006, 15h58

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