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# Discussion :

Utiliser une méthode d'une dll c++ dans un programme C# [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 52
    Points : 47
    Points
    47
    Par défaut Utiliser une méthode d'une dll c++ dans un programme C#
    Bonjour à tous,

    Je viens vers vous car j'ai cherché toute la journée la solution à mon problème mais je n'y arrive toujours pas.
    Comme l'intitulé l'indique je cherche à utiliser une méthode d'une dll c++ dans un programme C#.

    La difficulté c'est que c'est une méthode d'un objet quelconque, et je ne sais pas comment l'implémenter du côté programme C#.

    Exemple:
    Nom de ma dll : maDLL.dll

    Fichier monObjet.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool MonObjet::test()
    {
    	bool mytest = true;
    	return mytest;
    }

    J'ai essayé ceci côté programme c#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [DllImport("maDLL.dll", EntryPoint = "#1234", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.ThisCall)]
     public static extern bool test();
     
     static void Main(string[] args)
    {
    Console.WriteLine("le booleen est: " + test());
    }
    Dans DLL export viewer l'ordinal #1234 correspond à la fonction:
    public: bool __cdecl pla::MonObjet::test(void) __ptr64

    Mais cela ne marche pas, un message d'erreur s'affiche dans la console C#:
    <<Unhandled Exception: System.Runtime.InteropServices.MarshalDirectiveException: I
    nvalid PInvoke calling convention. Thiscall requires that the first parameter is
    present and can be enregistered.>>

    Merci pour votre aide svp.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Bonjour

    C'est normal

    Le principe de DLLImport est que dans ta DLL C++ (ou autre d'ailleurs), il a été déclaré une fonction comme étant "exportable".

    En gros, tu voudrais appeler une méthode d'un objet sans avoir instancié l'objet...

    Une solution est ici, sur StackOverflow : http://stackoverflow.com/questions/3...n-c-sharp-code

    Après, tu as plusieurs options...

    Option 1:
    Faire une classe en C++ / CLI qui va "traduire" le code C++ en C# (mais celà veut dire que tu as la maitrise du code C++)

    Option 2:
    Importer pleins de méthodes comme décrit dans la discussion stackOVerflow

    Option 3 (moins interessante)
    Porter le code C++ en code C# (ça se fait "en général" assez facilement et rapidement suivant le niveau du traducteur)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

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

Discussions similaires

  1. Accès à une méthode d'une form depuis une autre autre form
    Par arngrimur dans le forum Windows Forms
    Réponses: 16
    Dernier message: 13/01/2012, 15h45
  2. Réponses: 0
    Dernier message: 30/09/2009, 18h42
  3. Réponses: 6
    Dernier message: 20/04/2007, 15h24
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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