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 :

[C++\CLI] Interopérabilité COM


Sujet :

C++/CLI

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut [C++\CLI] Interopérabilité COM
    Bonjour à tous !

    Vu que je n'ai pas trouvé de sous-forum approprié dans la section dotNET, je poste ici

    Je réalise une application (webService) en C++\CLI.
    Jusque la pas de problème, mais j'ai besoin d'utiliser un Objet COM dans mon webService.
    J'ai donc rajouté une référence à mon Objet COM dans mon projet c++/CLI pour réaliser l'interopérabilité entre les deux technos.
    Pas de problème, le namespace de mon composant est bien reconnu, je peux déclarer des instances de la classe de mon objet COM,ça compile et ça marche sans soucis.

    Les problèmes surviennent quand j'essaie d'instancier (avec gcnew donc) ma classe COM pour en utiliser les fonctions.Pas de problème à la compilation du webService non plus, mais lorsque mon client se connecte au webService et fait un appel à la fonction du dit webservice, bam ça crash.Si je retire la ligne correspondant à mon objet COM dans le serveur, il n'y a aucun problème.

    L'erreur qui m'est retourner est de unspecified exceptions.
    J'ai essayer pas mal de chose et j'en viens a croire que c'est de mon composant COM que viens le problème....
    Alors si vous avez une idée d'ou peut provenir le problème, je suis preneur

    Voilà, j'espere avoir été clair sinon n'hesitez pas a poser vos questions
    Merci d'avoir pris le temps de lire ce long messages héhé :p

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est l'appel à la méthode de l'objet COM qui crashe ? ou ca te retourne un Hresult pas bon ?
    Tu utilises des tlb ? comme indiqué ici ? http://blog.developpez.com/index.php...&pb=1#more3821

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut
    YATTA ! Une reponse !

    Alors....
    Non ce n'est pas l'appel a la methode de l'objet COM qui crash, c'est l'instanciation de l'objet ! Je n'ai meme pas le temps d'utiliser de fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse^ classe = gcnew MaClasse()
    Avec l'instanciation crash, sans ça passe niquel.
    Du coup la methode de mon webService ( qui contient le bout de code ci dessus) s'arrete et retourne a mon clien une erreur HRESULT : -2147467259

    En ce qui concerne ton tutorial, je l'ai deja scruter avant de poster ici :p ( de meme que tes autres tuto sur le sujet de memoire )

    Ton tutorial permet d'utiliser un objet .NET dans du code natif, moi ce que je fais c'est utiliser une objet COM dans du code .NET !

    Quand je creer une reference dans mon projet qui pointe sur mon objet COM, cela me genere directement la DLL d'intéropérabilité (dans le namespace qui va bien) dont j'ai besoin, c'est me semble-til la procédure standard que j'ai retrouver un peu partout ( y compris sur MSDN).
    J'ai generer la dll d'interop en pointant la référence sur ma dll COM, ou sur le .tlb de mon projet COM, mais j'ai toujours le meme resultat.
    J'ai meme generer le dll d'intéropérabilité en outrepassant l'assistant, directement a partir de la commande tlbimp.exe, mais toujours le meme resultat.

    A priori la DLL d'intérop est bonne puisque intellisenser me donne la liste de mes classes/interface/fonctions de mon objet COM

    Je me demande si je ne dois pas compiler mon objet COM avec certaines options pour assurer une "compatibilité", je n'ai rien trouver sur le sujet et puis une "compatibilité d'intéropérabilité" ça me parait fort quand meme :p

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ok, au temps pour moi, j'avais mal lu

    t'as essayé en l'important à la mano ? avec TlbImp.exe ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut
    Bien bien me revoila, avec une partie de la solution

    Oui j'ai bien essayer de creer la DLL d'interop directement via tlbimp mais ça n'avait pas fonctionné.

    En faite le problème venait du fait que je n'avais pas placer la DLL d'interop dans le meme repertoire que mon application.
    Du coup, la declaration ne poser pas de probleme au compilateur ( puisqu'il avait la reference vers le COM), mais a l'execution plantage lors de l'instanciation c'etait donc normal.

    Apres avoir placer la DLL d'interop dans le meme repertoire que l'application, le composant COM est devenu fonctionnel, et j'ai continuer mon application
    Mais, et oui il y a un mais, les appels a mon objet COM ne fonctionnait pas a chaque fois ! Regulierement, un crash se produisait (avec le meme HRESULT) que precedemment.
    Du coup un webService qui ne fonctionne de maniere aleatoire c'est pas top :/

    Je me suis alors pencher vers les mecanisme de liaison tardive, c'est a dire instancier mon objet COM via son progID dans la registry au lieu de le faire via une DLL d'interop.....
    Et je suis arriver au meme resultat, a savoir l'apparation de crash de façon aleatoire, bref retour au point de depart

    J'ai donc abandonner le C++\CLI et mon webService :/

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    mais de mettre la dll dans le meme repertoire n'a pas résolu le pb ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Par défaut
    Bah oui et non.
    Une fois la DLL dans le meme repertoire, l'appel a l'objet COM crash de façon aléatoire.Alors qu'avant ça ne fonctionner jamais.
    Pendant les 50 premiers appel (par exemple) au COM tout marche t'es content ça roule, et puis soudain les 10 prochains appel se mettent à crasher et puis les 5 fois suivantes ca va remarcher, puis ça recrash 10 min plus tard, etc....
    Et lors de chaque crash, c'est la meme erreur (meme HRESULT) qui m'est retourner, à savoir donc "erreur non-spécifié".

Discussions similaires

  1. Rejoignez la rédaction de www.developpez.com
    Par Community Management dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 28/12/2015, 11h06
  2. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 19h14
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57

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