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

Dotnet Discussion :

Dllimport dll c


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut Dllimport dll c
    Bonjour,

    Pour la premiere fois j'utilise le dllimport pour appeller une dll c que j'ai codé.

    Ci-dessous, le prototype de la fonction c dans la dll :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __declspec(dllexport) void GetVoiePkdll(char* path, long Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, int sNbTT, double** pVoieP)
    Ci-dessous, la declaration de la fonction c dans mon programme c# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DllImport("ComputePK.dll", EntryPoint = "GetVoiePkdll")]
    static extern void GetVoiePkdll(string path, long Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, int sNbTT, ref double[] VoieP);
    Lors que j'essaye de lancer la fonction, on m'indique que le point d'entrée n'a pas été trouvé.
    Pourriez vous m'aider ?
    Merci.
    F.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Pour pouvoir vérifier ton point d'entrée, tu peux utiliser un petit outil qui te permet de voir ce genre de chose.
    Je te citerais 'Dependency Walker' qui te fait ça (entre autre).

    Ça ne corrigera pas ton problème directement, mais tu sera sur que ta fonction est visible et qu'elle a le nom attendu.

    Bonne continuation.

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut
    Merci de ton aide.

    La fonction est bien visible depuis le c#, j'ai vu dans dependancy walker, c'est ok.
    J'arrive à l'appeler et à executer du code.
    Maintenant, je souhaite passer un autre pointeur, et c'est maintenant que ca coince:

    Le prototype c/c++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void GetVoiePkdll(const char* path, int Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, short sNbTT, short*psLgTT, double * pVoieP)
    Le dllimport c# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [DllImport(@"ComputePK.dll", EntryPoint = "?GetVoiePkdll@@YAXPBDHHNHFPAFPAN@Z")]
            static extern void GetVoiePkdll(string path, int Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, short sNbTT,short[] sLgTT,double[] VoiePK);
    Et quand j'execute ca me donne cela :

    Informations supplémentaires : Un appel à la fonction PInvoke "---::GetVoiePkdll' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut
    Bonjour,

    J'ai essayé de nouvelles solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            static extern void GetVoiePkdll(string path, int Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, short sNbTT, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] short[] sLgTT, [MarshalAs(UnmanagedType.LPArray)]double[] VoiePK);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            static extern void GetVoiePkdll(string path, int Echantillons, int LongueurBlocDMA, double dCycle100, int AcqBytePerCycle, short sNbTT, ref short[] sLgTT, ref double[] VoiePK);
    Sans succes

  5. #5
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Flow_75 Voir le message
    La fonction est bien visible depuis le c#, j'ai vu dans dependancy walker, c'est ok.
    J'arrive à l'appeler et à executer du code.
    Maintenant, je souhaite passer un autre pointeur, et c'est maintenant que ca coince:
    Attention, si c'est une autre surchage de la fonction, ce n'est pas la même fonction ! Il faut donc adapter le paramètre EntryPoint en conséquence. L'avez-vous bien fait ?

Discussions similaires

  1. DllImport et DLL maison
    Par Harooold dans le forum C#
    Réponses: 3
    Dernier message: 25/02/2009, 12h43
  2. utilisation de DllImport("user32.dll",
    Par WBO dans le forum VB.NET
    Réponses: 4
    Dernier message: 10/12/2008, 00h52
  3. convertion DllImport("coredll.dll" en vb.net
    Par WBO dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 08/12/2008, 16h22
  4. Réponses: 7
    Dernier message: 02/09/2008, 16h30
  5. Réponses: 16
    Dernier message: 08/10/2007, 23h11

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