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 :

Appeler une DLL C à partir de C#


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut Appeler une DLL C à partir de C#
    Bonjour à tous,

    J'essaye d'appeler une DLL écrite en A à partir d'un program C# mais j'ai une errur çà l'exécution.

    Voici le contenu de ma DLL C :

    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
    /* file test.h */
    #define DLL_EXPORT __declspec(dllexport)
     
    DLL_EXPORT struct struct_test{
     int a;
     int b;
    };
     
    DLL_EXPORT int func_test(struct struct_test * t);
     
    /*********************************************/
     
    /* file test.c */
     
    #include "test.h"
     
    DLL_EXPORT int func_test(struct struct_test * t)
    {
     return t->a+t->b;
    }
    et voici mon code c# :

    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
    using System;
    using System.Runtime.InteropServices;
     
    public class csharp_test_class
    {
     [StructLayout(LayoutKind.Sequential, Pack=1)]
     public struct struct_test{
      public int a;
      public int b;
     };
     
     [DllImport("test")]
     public extern static int func_test(
      ref struct_test t
     );
     
     public static void Main()
     {
      struct_test t = new struct_test();
      t.a = 3;
      t.b = 4;
      Console.WriteLine(func_test(ref t));
     }
    }
    L'erreur renvoyée est la suivante :
    PInvokeStackImbalance was detected :
    A call to PInvoke function 'Project1!csharp_test_class::func_test' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
    Quelqu'un a-t-il une idée pour résoudre ce problème ?

    D'avance merci pour vos réponse,

    Bien à vous,

    Yan302

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Hello,

    J'ai trouvé mon problème. If faut que je précise "CallingConvention=CallingConvention.Cdecl" dans ma clause DllImport.

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

Discussions similaires

  1. Appeler une DLL à partir d'un programme Qt
    Par lisco dans le forum Qt
    Réponses: 21
    Dernier message: 06/05/2009, 17h29
  2. [JNI] Appeler une DLL Fortran à partir de Java
    Par Graffity dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/11/2008, 00h07
  3. Appeler une DLL à partir de MATLAB
    Par swap_nibble dans le forum MATLAB
    Réponses: 0
    Dernier message: 06/02/2008, 12h06
  4. Réponses: 12
    Dernier message: 23/05/2007, 21h40
  5. Appel d'une DLL Win32 à partir d'une appli DOS 16bit
    Par telghali dans le forum Assembleur
    Réponses: 5
    Dernier message: 23/02/2007, 21h42

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