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
6 mai 2010 à 12:57
*.tlb c'est pour les librairies COM.

Les ressources c'est une mauvaise piste.

Le Chapitre qui t'intéresse c'est "Consommation de fonctions DLL non managées" ça va t'expliquer l'attribut DLLImport.

Impossible d'importer une librairie C/C++ dans ton projet C#, il faut simplement la mettre dans le dossier de l'application et écrire les bonne définitions Dllimport dans ton code C#.
3