Invoquer une DLL c++ dans programme c# [Résolu]

Signaler
Messages postés
18
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
-
Messages postés
18
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010
-
Bonjour,

depuis quelques jours je me heurte à résoudre un problème qui à première vue, ne semblait pas poser de problème : Invoquer les méthodes d'une DLL faite en C++, dans un programme C# qui fait office d'IHM.


En effet après avoir généré mon .lib & .dll, j'ai souhaité de la même façon les importer.

Voici les premiers s'griboullit que j'ai pu faire, en m'inspirant des divers réponses apportés à d'autres personnes, ayant des problèmes du genre.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices; //pour l'import d'une DLL






namespace monInterface
{
[DllImport("maDLL.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
    static extern void comRapide(std::string & NumAppelant, std::string & NumAppele) const;  



    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void bt_Quitter(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
}


Ce que je ne comprend pas :

- Les différentes options à mettre, comme CharSet, ou CallingConvention.
- Pourquoi le "void" est compté comme : class, delegate, enum, interface ou struct attendu
- Si je met Interface à la place de void, du coup ma fonction importée n'est plus reconnue


Finalement, auriez vous un "how to", clair et précis pour comprend comme ça marche, car il s'agit bien de comprendre et non de recopier vos réponses ;) Quoi que, recopier vos solutions est faisable dans un premier temps :p

24 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Si ta DLL C++ est compilée en x86 tu dois compilé ton programme C# en x86 même pour le faire tourner sur un Windows x64.. Dans ce cas il tournera en WoW64 avec le framework 32bits sous Windows 64 bits.
Messages postés
18
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010

Bonjour,

en effet je l'avais bien compris, c'est là qu'est le problème. La DLL C++ est compilé Win32 et ensuite je compile mon programme C# en X86 , pourtant j'ai le problème de format qui intervient à l'appel de la fonction comprise dans la DLL.
Messages postés
18
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010

Bonjour,

je me demande si le problème ne vient pas l'invocation de ma méthode qui contient 2 char*, aurais je fais une erreur ? quelqu'un peut t'il me confirmer que l'invocation est correcte ?
Messages postés
18
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
20 mai 2010

Bonjour,

il y a du neuf ! ah heu non enfaite pas de neuf, toujours bloqué à l'appel de ma DLL. Je reste assez certain que c'est mon marshling qui n'est pas bon, mais pas de trouvaille de ce côté, malgré plusieurs bidouilleries.