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 :

[DLL_C] DllImport: Importer et exploiter une librairie DLL C


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut [DLL_C] DllImport: Importer et exploiter une librairie DLL C
    Bonjour,

    J'ai une DLL C sans les source, j'aimerais l'utiliser.. j'ai essayé de faire un ajout de reference, mais VS, me dit:
    Une reference à MA_DLL_EN_C.DLL n'a pas pu être ajoutée. Assurez vous que le fichier est accessible, et qu'il s'agit d'un assembly valide, ou d'un composant COM
    merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    C'est logique puisque ta librairie n'est pas COM...

    Il faut donc passer par une technique appelée : Interop

    Il y a des tutoriels dessus sur le site !

    The Monz, Toulouse

  3. #3
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Alors tu dois connaitre le prototype des fonctions.

    ensuite tu dois les déclarer les memes fonctions en utilisant l'attribut DLLImport.

    un lien pour t'aider
    http://morpheus.developpez.com/dlldotnet/

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    En effet apres quelques minute de recherche j'ai trouvé ca...

    je crois que jvais ramer... donc je posterais si besoin


    merci !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    hum alors j'ai un pti souci, je vous donne le message d'erreur et le code, ca vous parlera sans doute mieux:

    Erreur 1 Les pointeurs et les mémoires tampons de taille fixe ne peuvent être utilisés que dans un contexte unsafe \Form1.cs 15 50
    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("MY.DLL")]
    public static extern int MyFct(long *lSer, long lkey, byte[] tF, long *plNb, DateTime psDate, long tC);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
               long lSer = new long();
                long lkey = 123456;
                byte[] tf = new byte[40];
                long lNb = new long(); ;
                object psDate = new object(); ;
                byte[] tC = new byte[18];
     
     
                fixed (long* plSer = lSer)
                fixed (byte* ptF = tF)
                fixed (long* plNb = lNb)
                {
                    int i = MyFct(&lSer, lKey, &tF, &plNbPoste, 0, tC);
                }

    voici la signature de la fonction C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TOOLSAPIP(int) MyFct(LPLONG lSer,long lKey,TFLAG tFlag,LPLONG plNb,LPSDATE psDate,TCODE tC);

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    hum j'ai progréssé (un peu), ca compile

    mais a l'execution j'ai ce message:
    Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée

    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [DllImport("MY.DLL")]
            public static extern int MyFct(IntPtr lSer, int lKey, byte[] tFlag, IntPtr plNb, string psDate, byte[] tC);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static void test()
            {
     
                IntPtr longSer = new IntPtr();
                int longKey = 12345;
                byte[] tflag = new byte[10];
                IntPtr lNb = new IntPtr();
                string psDate;
                byte[] tC = new byte[15];
     
    int i = MyFct(lSerie, lKey, tflag, lNb, null, tC);
            }

    Peut etre qu'il faut que j'utilise fixed ? mais je patine... fixed (IntPtr plSer = lSer)
    compile pas...



    Ps: j'ai trouvé un site pas mal qui referenci un tableau avec les type c#/c++/c :
    http://www.codeproject.com/KB/dotnet...stoDotNET.aspx

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

Discussions similaires

  1. [WD15] Imprimer en PDF via une Librairie DLL
    Par cflo56 dans le forum WinDev
    Réponses: 10
    Dernier message: 21/01/2011, 14h33
  2. [Lazarus] Créer et utiliser une librairie .dll ou .so
    Par parhelie dans le forum Lazarus
    Réponses: 2
    Dernier message: 08/08/2010, 15h24
  3. [D5] - Tester si une librairie (dll) est installée sur le PC
    Par davidkungfu dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 14/05/2010, 17h16
  4. Importation externe d'une librairie
    Par lichman dans le forum R
    Réponses: 1
    Dernier message: 12/10/2009, 17h21
  5. Recompiler une librairie dynamique (DLL) en statique
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 07/04/2005, 19h28

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