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 :

importer une DLL en C++


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut importer une DLL en C++
    Bonjour,

    Au cours du stage que je suis en train de faire, je vais devoir créer un programme en C# qui fait appel à des méthodes d'un code en C++. L'idée qui est venu était d'encapsuler ce code dans une DLL. Comme je ne sais pas comment faire, j'ai commencé par un petit exemple très simple pour maîtriser cette technique.

    J'ai écrit le code suivant en C++:

    Header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #pragma once
     
    using namespace System;
     
    namespace somme1 {
     
    public class Somme
    	{
    	public:
    	 int sum(int a, int b);
    	};
    }
    et le corps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "somme1.h"
     
    int somme1::Somme::sum(int a, int b)
    {
    	return a+b;
    }
    J'ai compilé et j'ai formé la DLL. Ensuite en C#, j'essaie de l'utiliser comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using somme1;
     
    namespace test_somme
    {
        class Program
        {
            [DllImport("somme1.dll", EntryPoint = "sum")]
            static extern int sum([MarshalAs(UnmanagedType.I4)] int a,[MarshalAs(UnmanagedType.I4)] int b);
     
            static void Main(string[] args)
            {
                int a, b,c;
                string ligne;
     
                Console.WriteLine("entrer le premier entier: ");
                ligne = Console.ReadLine();
                a = int.Parse(ligne);
                Console.WriteLine("entrer le deuxieme entier: ");
                ligne = Console.ReadLine();
                b = int.Parse(ligne);
     
                //Appel de la méthode de la librairie
     
                Console.WriteLine("le resultat est: ");
     
                c = sum(a, b);
     
                Console.WriteLine(c);
     
            }
        }
    }
    J'obtien l'erreur suivante:
    Unable to find an entry point named 'sum' in DLL 'somme1.dll'.
    J'ai essayé beaucoup de combinaisons comme somme1.Somme.sum, etc. Mais toujours ce même genre d'erreur. Quelqu'un peut il m'aider svp à réaliser cette importation de DLL?

    Merci.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    D'une manière générale, tu peux importer des fonctions exportées par une DLL mais, sauf erreur de ma part, pas des méthodes de classes, ni des classes , à moins de transformer la DLL en composant COM.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    D'accord, merci pour cette réponse. Comment transformer la DLL en composant COM, c'est une option dans la compilation?

    Sinon, comment définir une fonction "exportable"?

    Merci.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Sieur_Blabla Voir le message
    D'accord, merci pour cette réponse. Comment transformer la DLL en composant COM, c'est une option dans la compilation?
    Pas fait cela depuis près de 10 ans, je ne m'en souviens plus. Pose la question sur le forum C++ ou programmation windows.

    Sinon, comment définir une fonction "exportable"?
    Ta fonction doit être définit hors d'une classe et tu utilises le __declspec(dllexport).

    http://msdn.microsoft.com/fr-fr/library/a90k134d.aspx

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. Comment importer une DLL dans du code???
    Par Jayceblaster dans le forum Delphi .NET
    Réponses: 29
    Dernier message: 19/04/2006, 19h19
  2. Importer une DLL
    Par Sallie dans le forum MFC
    Réponses: 8
    Dernier message: 14/04/2006, 10h47
  3. [NetBeans] importer une dll
    Par guitalca dans le forum NetBeans
    Réponses: 1
    Dernier message: 16/12/2005, 11h13
  4. [v6.0] Importer une DLL
    Par ni0urk dans le forum MFC
    Réponses: 19
    Dernier message: 17/11/2005, 16h19
  5. [FLASH MX2004] Importer une dll
    Par Fry dans le forum Flash
    Réponses: 4
    Dernier message: 07/01/2005, 10h54

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