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#] Comment appeler un objet C++ ?


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par d�faut [C#] Comment appeler un objet C++ ?
    Bonjour,

    Je ne connais pas trop le c#, j'ai un composant dll (non com) fournit par un client. Dans mon programme c# j'utilise DllImport etc ..., j'arrive � appeller les focntion static de la dll sans probl�me.

    Mon soucis est que dans cette dll il a des objet qu'il faut instancier ex :

    En C++
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     
    MaClasse *class = new MaClasse(const char *  ODBCName =          DEFAULT_ODBC,  
      const char *  LoginName = USERNAME,  
      const char *  Password = "" );
     
    class->maMethode();
    Et je ne sais pas comment faire en C#.

    merci pour votre aide.

    xarius.

  2. #2
    Membre �m�rite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par d�faut
    La r�ponse est simple : ce n'est pas possible.

    Les dll sont con�ues pour exporter des fonctions C.
    Le passage de classes par une interface de dll est une extension non standard sp�cifique aux compilateurs.

  3. #3
    Expert confirm�
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par d�faut
    donc tu veux pouvoir Marshaller une classe depuis le C++ vers le C# c'est bien �a ?
    C'est pas vraiment impossible, puisque COM le fait donc en gros :
    soit tu fait une biblioth�que COM
    soit ... pour le 2� point je n'ai pas trouv� la r�ponse ( pour l'instant )
    par contre je me souvient que c'�tait possible avec Delphi donc il doit bien y avoir un moyen en passant par des pointeurs de classes ...

    edit:
    Quand j'y pense, si tu as Visual C++.Net tu pourrais aussi passer par une classe __gc et une assembly en Mixed Mode ( C++ CLI ou Managed et C++ Natif )

  4. #4
    Membre �m�rite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par d�faut
    Si on change les donn�es de base de la question, il est peut �tre possible de faire un wrapper .net pour cette dll en utilisant Visual C++ .net.
    A condition que cette dll provienne d'un compilateur Microsoft et pas Borland ou autre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par d�faut
    donc tu veux pouvoir Marshaller une classe depuis le C++ vers le C# c'est bien �a ?
    Oui mais je ne sais pas trop comment faire.



    Si on change les donn�es de base de la question, il est peut �tre possible de faire un wrapper .net pour cette dll en utilisant Visual C++ .net.
    A condition que cette dll provienne d'un compilateur Microsoft et pas Borland ou autre.
    Oui la dll vient d'un compilo Microsoft

    Mais c'est pareil je ne sais pas trop comment faire.

    Auriez vous des bouts de codes ?

  6. #6
    Expert confirm�
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par d�faut
    En gros voil�, si tu sais charger ta classe � partir du C++ vers le C++ ( ), tu peut �crire un wrapper comme d�crit ici :
    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vcmex/html/vcgrfmanagedwrappersaroundunmanagedtypes.asp
    en gros �a donne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    __gc public class managed ...
    {
      nativeclass * qqch;
      managed(params ...)
      {
        qqch = new qqch(params ...);
      }
    }
    Dans ce cas il faut donc convertir tout les appells � la classe et les faire passer par ta classe manag�e. Une fois que cel� est fait tu pourras acc�der directement � la classe tel quel ( � travers la class __gc ) depuis ton programme C#, et �a c'est bien

    Sinon il faut passer par du Custom Marshalling et l� �a devient vite tr�s costaux
    http://www.codeguru.com/columns/kate/article.php/c4867/
    http://www.codeguru.com/columns/kate/article.php/c4865/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par d�faut
    Ok, merci pour votre aide, je vais essayer ce code, et je vous tiens au courant.

    Merci.

    @ xarius

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par d�faut
    Petite question tout de m�me, je ne poss�de pas les sources de ma dll, juste la doc, me disant ce qu'il faut instancier et les fonctions � appeller.

    Aussi pour faire du code manager faut il les sources de la dll ou pas ?

    Cordialement,

    @+ xarius

  9. #9
    Membre �m�rite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    D�tails du profil
    Informations personnelles :
    �ge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par d�faut
    Non, pas besoin des sources.

    L'id�e est d'utiliser Visual C++ .Net pour acc�der � la DLL et cr�er des objets non manag�e, bref , utiliser cette Dll comme elle a �t� con�ue pour l'�tre.

    Pour faire le lien avec C#, il faut cr�er en C++ .net un assembly (type biblioth�que de classe) qui expose une classe publique manag�e qui fait le lien avec les objets non manag�s. C'est une classe enveloppe (wraper).

  10. #10
    Membre extr�mement actif
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    D�tails du profil
    Informations personnelles :
    Localisation : R�union

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Par d�faut
    Bonjour,

    tout d'abord d�sol� de d�terrer ce topic assez ancien, mais j'aimerais faire exactement la m�me chose que Xarius, sauf que je poss�de le code source c++ de ma lib
    ma lib se compose d'un fichier .dsw � la racine, et dans chaque r�pertoire il y a un fichier .dsp

    si je fait un click droit sur ma solution puis ajouter -> projet existant (je choisi alors mon .dsp) et bien il me le rajoute bien � ma solution, par contre je ne peut pas ajouter ce nouveau projet dans les r�ferences de mon prog c# car j'ai un message d'erreur : une r�ference � "malib" ne peut pas etre ajout�e

    est-ce que quelqu'un peut m'�clairer svp ?

    merci d'avance

  11. #11
    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
    ce n'est pas une r�f�rence qu'il faut utiliser car ce n'est pas une assembly, plutot un dllimport, voir http://nico-pyright.developpez.com/t...c2005/interop/

  12. #12
    Membre extr�mement actif
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    D�tails du profil
    Informations personnelles :
    Localisation : R�union

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Par d�faut
    merci, ton lien est tres interressant effectivement

    je sais comment utiliser dllimport, mais l� c'est pour utiliser des classes (pas juste des fonctions)
    mais c'est quand m�me vachement compliqu�...

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

Discussions similaires

  1. [FAQ] Comment appeler un objet dans une page ?
    Par SylvainPV dans le forum Contributions JavaScript / AJAX
    R�ponses: 0
    Dernier message: 18/10/2014, 17h25
  2. Comment utiliser une variable pour appeler un objet ?
    Par kikou63 dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 28/10/2010, 17h54
  3. R�ponses: 3
    Dernier message: 25/06/2008, 14h38
  4. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    R�ponses: 7
    Dernier message: 24/05/2003, 17h34

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