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 :

Problème d'appel de DLL C avec C#


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème d'appel de DLL C avec C#
    Bonjour,

    De quelle façon peut-on atteindre les fonctions d'une DLL écrite en C 32bits à partir d'un projet C#, j'ai bien trouvé DLLIMPORT(...) en C# mais je butte sur des problèmes de passage de paramètre char * => String, avec les IntPtr xnomfic=Marshal.AllocHGlobal(nomfic.Length + 1); et xnomfic=Marshal.StringToHGlobalAnsi(nomfic); j'obtiens une structure qui contient un char * mais cela ne correspond pas à mon prototype de fonction C qui et un char *.

    Interface C 32bits

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef __cplusplus
    extern "C" {
    #endif
    __declspec( dllexport ) int loi_init(char *,WORD,WORD,WORD);  
    #ifdef __cplusplus  
    }  
    #endif

    en C#

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [DllImport("acti2loi.dll", CharSet = CharSet.Ansi)]
    public static extern int loi_init(IntPtr nomfic,ushort lgnomfic, ushort traceok, ushort modeajout);
     
     
    public Int16 x_loi_init(string nomfic, UInt16 lgnomfic, UInt16 traceok, UInt16 modeajout)
            {
                IntPtr xnomfic=Marshal.AllocHGlobal(nomfic.Length + 1);
                xnomfic=Marshal.StringToHGlobalAnsi(nomfic);
                int retour = 0;
                retour =loi_init(xnomfic,(ushort)lgnomfic,(ushort)traceok,(ushort)modeajout); 
                return ((Int16)retour);
            }


    Merci d'avance
    Yves

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Hello il semble qu'il faut utiliser Marshal.PtrToStringAuto pour convertir ton char* en string
    https://docs.microsoft.com/en-us/dot...o?view=net-5.0

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    Hello il semble qu'il faut utiliser Marshal.PtrToStringAuto pour convertir ton char* en string
    https://docs.microsoft.com/en-us/dot...o?view=net-5.0
    Merci pour cette réponse mais IntPTR est une stucture du C++, Char est un type hérité en C++ ce n'est pas le cas en C. j'ai mis de côté ce problème j'y reviendrais bientôt.

    Cordialement
    Yves

Discussions similaires

  1. Probléme d'appel d'une fonction avec EF
    Par kaka83185 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 03/05/2012, 10h27
  2. Problème d'appel à une dll
    Par L4BiN dans le forum Bibliothèques, systèmes et outils
    Réponses: 1
    Dernier message: 03/11/2010, 11h40
  3. Problème pour appeler une DLL C en Csharp
    Par juanito7 dans le forum C#
    Réponses: 3
    Dernier message: 21/10/2010, 22h06
  4. Problème d'appel d'un JPanel avec passage d'argument
    Par cirilio27 dans le forum Général Java
    Réponses: 1
    Dernier message: 05/05/2010, 10h27
  5. [serveur 2003] Problème d'appel de machine distante avec delprof
    Par boss_gama dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 07/02/2007, 17h14

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