Invoquer une DLL c++ dans programme c#

Résolu
Belisir Messages postés 18 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 20 mai 2010 - 3 mai 2010 à 15:08
Belisir Messages postés 18 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 20 mai 2010 - 20 mai 2010 à 10:42
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
11 mai 2010 à 13:45
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.
0
Belisir Messages postés 18 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 20 mai 2010
11 mai 2010 à 14:00
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.
0
Belisir Messages postés 18 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 20 mai 2010
17 mai 2010 à 09:13
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 ?
0
Belisir Messages postés 18 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 20 mai 2010
20 mai 2010 à 10:42
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.
0
Rejoignez-nous