Belisir
Messages postés18Date d'inscriptionlundi 26 avril 2010StatutMembreDernière intervention20 mai 2010
-
3 mai 2010 à 15:08
Belisir
Messages postés18Date d'inscriptionlundi 26 avril 2010StatutMembreDernière intervention20 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
A voir également:
Tentative de chargement d'un programme de format incorrect
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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.
Belisir
Messages postés18Date d'inscriptionlundi 26 avril 2010StatutMembreDernière intervention20 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.
Belisir
Messages postés18Date d'inscriptionlundi 26 avril 2010StatutMembreDernière intervention20 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 ?
Belisir
Messages postés18Date d'inscriptionlundi 26 avril 2010StatutMembreDernière intervention20 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.