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++/CLI Discussion :

Problème avec des dll c++ en c#


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut Problème avec des dll c++ en c#
    Bon beh je vais commencer par vous dire bonjour à tous,

    voilà je suis en train de me casser les dents sur un truc de dingue
    j'ai reçu début août une dll par un premier fournisseur de hardware...
    mais impossible de l'exploiter... il disait que la dll n'était pas trouvée alors qu'elle était bien là.
    Quelques jours plutard un consultant de ce fournisseur m'envoit une autre dll qui elle est presqque exploitable, problème de NotSupportedException...
    Après avoir posté sur votre forum, Bingo... ça fonctionne
    J'éteins mon PC pour le WE et depuis hier...
    ma précédente DLL est trouvée. Et je n'ai pas touché une seule ligne de code... Toutefois, j'ai une fonction qui a ce prototype
    en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonTotoDLL_TT_BOOL ReadMonToto(BYTE *dest, WORD addr, BYTE len);
    et je met ceci en c#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [DllImport("MonTotoDLL")]
     public static extern int ReadMonToto(
                byte[] dest, 
                UInt16 addr, 
                int len );
    j'ai pas d'erreur dans l'exécution mais alors que je devrais avoir une valeur de retour à 1 j'ai 0... Pensez vous que mon code c# soit bon.
    Et puis aussi mon autre soucis c'est que la dll fournit par le second fournisseur elle, ne semble plus être trouvée à son tour.

    Je ne sais pas si je suis bien fait comprendre mais en tout cas merci d'avance si vous pouvez m'aider...


  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    Ah voui j'ai oublié de dire que j'utilise un dans mon C# parce que dans le projet founirt en C++ à un moment donné il font passé la valeur 1021...
    et euh sinon je continue mes recherches mais toujours rien, mais bon ça fait pas une heure

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    un pointeur, ca veut pas dire gd chose, le BYTE * est sensé etre rempli ? se remplir ?

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    je suppose qu'il doit se remplir
    d'autan plus que pour moi dest ça doit correspondrre à destination.
    Le projet qu'il mon donné ne fonctionne même pas. Mais je vais quand même leur faire confiance pour le prototypage des fonctions.

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ca peut échouer s'il faut que la mémoire soit allouée par exemple, sans vraiment connaitre le fonctionnement de la fonction, c'est pas facile.
    t'as un projet en C qui marche et qui sait utiliser la fonction ?

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    et non malheureusement...
    il m'ont fournit un exe et le code, celui-ci utilise la dll mais quand je veux exécuter le code j'ai des messages d'erreurs... il ne trouve pas les fonctions de ma dll...

  7. #7
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    Bon beh moi je suis en mode

    où j'en suis... toujours nulle part...
    je me suis dis que peut-être en essayant de debugger le porgramme c++ qu'on m'a fournit ça irait mieux... mais je me retrouve avec ces erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Creating library X8602Dbg/S9_Explorer-x86-ppc2002-21d.lib and object X8602Dbg/S9_Explorer-x86-ppc2002-21d.exp
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9ReadSecurityArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9ReadDataArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__CardOpen referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__ReaderOpen referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9WriteDataArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnWrite(void)" (?OnWrite@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9PresentCardSecretCode referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnBtnWriteEc(void)" (?OnBtnWriteEc@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__ReaderClose referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnOff(void)" (?OnOff@CS9_ExplorerDlg@@IAEXXZ)
    X8602Dbg/S9_Explorer-x86-ppc2002-21d.exe : fatal error LNK1120: 7 unresolved externals
    Error executing link.exe.
    j'en suis vraiment
    et je n'ai pas le choix ça doit fonctionner.

    Donc je vais essayer de me concentrer sur mon problème de dll not found...

    DLL PInvoke 'MOB_SDK' introuvable.
    Bon je vais vous situer mon contexte de travaille...
    je développe pour Pocket PC (mobile 5.0)
    ma dll est écrite en c++ et je connais le prototype des fonctions parce que le consultant m'a envoyer son code d'exemple qui utilise cette fameuse dll. Son code est écrit en c++ (MFCCE) et ça tourne...
    Précemment quand je compilais mon programme j'avais cette erreur:
    http://www.developpez.net/forums/sho...d.php?t=402418
    (voir post précédent tous la partir compact framework)

    j'ai peut-être bien fait une fausse manipulation parce que tout d'un coup il n'a plus trouvé ma dll
    j'avais fait des essais avec ce que l'ont m'avait conseillé... mais avec une autre dll puisqu'il ne voulait plus du tout trouvé la mienne...
    Je sais c'est à ce casser les dents

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    donc il trouve pas la dll
    c'est le dllimport qui échoue ?
    la dll est dans le meme répertoire que l'exe ?

  9. #9
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    oui la dll se trouve dans le même répertoire que l'exe.


    Mon appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (clsMOB_SDK.MOB_SIS_GetPublicData(ref Pdbf, ref Isdf) == 1)
    Mon DLLImport
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            [DllImport("MOB_SDK")]
            public static extern int MOB_SIS_GetPublicData(
                ref MOB_SIS_Pbdf ptPdbf,
                ref MOB_SIS_Isdf iSdf );
    en C++
    La déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           MOBLIB_API MOB_Status MOB_SIS_GetPublicData(MOB_SIS_Pbdf *ptPbdf, MOB_SIS_Isdf *ptIsdf);
    L'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tStatus = MOB_SIS_GetPublicData(&tPbdf, &tIsdf);
    Pbdf et Isdf sont des élément de type structure qui sont devenu des classes en C# déclarée 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
    [StructLayout(LayoutKind.Sequential)]
           public class MOB_SIS_Pbdf
            {
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = FIDN_LEN)]
               string FIDN; // File Identification Number (0012)
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = FSKI_LEN)]
               string FSKI;  // File Secret Key Index
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PBDF_SSIN_LEN)]
               string SSIN;  // Social Security Identification Number
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = BCDDATE_LEN)]
               string DCDT;  // Data Capture Date
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PBDF_NAME_LEN)]
               string NAME;  // Holder's Firstname
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PBDF_SNME_LEN)]
               string SNME;  // Holder's Surname
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PBDF_INIT_LEN)]
               string INIT;  // Holder's initial
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PBDF_SEXE_LEN)]
               string SEXE;  // Holder's Sex
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = BCDDATE_LEN)]
               string BRDT;  // Holder's Birthdate
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = FCTF_LEN)]
               string FCTF;  // File Certificate
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = FCSM_LEN)]
               string FCSM;  // File Checksum
            }

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est en compilant un programme C++ que tu as des messages d'erreurs ?
    c'est quoi le message déjà ?

  11. #11
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Creating library X8602Dbg/S9_Explorer-x86-ppc2002-21d.lib and object X8602Dbg/S9_Explorer-x86-ppc2002-21d.exp
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9ReadSecurityArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9ReadDataArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__CardOpen referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__ReaderOpen referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnRead(void)" (?OnRead@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9WriteDataArea referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnWrite(void)" (?OnWrite@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__S9PresentCardSecretCode referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnBtnWriteEc(void)" (?OnBtnWriteEc@CS9_ExplorerDlg@@IAEXXZ)
    S9_ExplorerDlg.obj : error LNK2019: unresolved external symbol __imp__ReaderClose referenced in function "protected: void __thiscall CS9_ExplorerDlg::OnOff(void)" (?OnOff@CS9_ExplorerDlg@@IAEXXZ)
    X8602Dbg/S9_Explorer-x86-ppc2002-21d.exe : fatal error LNK1120: 7 unresolved externals
    Error executing link.exe.
    ça c'est pour les messages d'erreur... le programme que j'essai d'exécuter c'est pour voir le fonctionnement des fonctions...


    Mais comme expliqué plus haut j'ai deux dll qui doivent faire la même chose sauf qu'elles viennent de fournisseur différent.
    Pour une les fonctions apparement ne tourne pas très rond J'essaie de lire les données d'une carte à puce.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTotoDLL_TT_BOOL ReadMonToto(BYTE *dest, WORD addr, BYTE len);
    me retourne 0 alors qu'elle devrait me retourner 1... mais le fournisseur1 ne veut pas du tout m'expliquer qu'elle pourrait être le problème, j'ai donc décidé de regarder le projet en c++ que le fournisseur1 m'avait envoyer mais il ne compile pas (voir les messages du haut)

    J'ai donc décidé de regarder à l'option numéro2.
    J'ai une DLL qu'il ne trouve pas à l'exécution et un programme c++ qui fonctionne. Je ne sais pas si je me suis bien faite comprendre...

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    euh ... non

    mais les erreurs de link mentionnés plus haut doivent venir d'un oubli.
    Il faut linker avec le .lib qu'ils ont du te fournir avec la DLL, ou alors faire un chargement dynamique

  13. #13
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    je suis tout à fait d'accord pour l'erreur de link... mais le HIC... c'est que le .lib est bien là...

    Je crois que mon PC me fait la tête, il n'est pas très coopératif...

    mais bon mon problème à l'heure actuel c'est qu'il ne trouve pas ma dll qui est bien dans mon répertoire et que ça fonctionnait avant mais sans modifier le souce ça ne fonctionne plus...

    Réinstallation du compact framework = OK...
    Le nom de ma DLL = OK... (j'ai même essayé en changeant les minuscules-majuscules)
    J'ai essayé toute les solutions proposées...
    Quelqu'un a une idées avant que je ne devienne marteau

  14. #14
    screetch
    Invité(e)
    Par défaut
    ouvre tes DLL avec depends.exe (telechargeable gratuitement sur le net) et peut etre que ce dernier t'indiquera une dependance manquante.

    C'est a dire que ta DLL est bien presente mais elle a été liée avec une DLL qu'ils auraient oublié de te donner peut etre, c'est pour ca qu'il refuse de charger (le message "impossible de trouver la DLL" est propagé en cascade jusq'a ton LoadLibrary qui te fait alors penser que c'est ta propre DLL qui n'a pas ete trouvee)

    si dans depends tu vois une DLL qui manque, tu sauras...

    ne tiens pas compte de la DLL manquante msjava.dll ou un truc du genre! toute les DLL ont ca.

  15. #15
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    Ah oui merci...
    en effet il ne trouvait pas "WINSOCK.DLL", je me retrouve avec mon erreur NotSupportedException...
    mais il me dis aussi ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COREDLL.DLL Error opening file. Le fichier spécifié est introuvable(2)
    et je ne le trouve pas sur mon disque dur... ça pourrait être ça qui me provoquerait cette exception?

  16. #16
    screetch
    Invité(e)
    Par défaut
    oui.

  17. #17

  18. #18
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    Merci...
    mais en effectuant des recherches sur cette dll, il me dit qu'elle doit être dans mon répertoire system32... c'est pas un peu bizarre, puisque c'est pour mon PDA?
    Sinon tu penses qu'en plaçant cette DLL dans mon répertoire mon souci sera réglé? Tu ne sais pas où je peux la trouvé?
    En tout cas tu m'aides beaucoup, j'étais vraiment à deux doigts de pleurer...

  19. #19
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    il y a quand même queluqes chose de bizarre, le programme de test fournit avec ma DLL fonctionne...
    si c'était vraiment un problème avec coredll.dll ça ne devrait plus fonctionné...

  20. #20
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 47
    Par défaut
    bon beh... je ne trouve pas coredll.dll sur mon disque mais j'y fais appel dans mon programme pour lancer un processus...
    Donc je ne pense pas que ce soit la cause de mon problème...

    Voilà ce que me propose l'aide de visual studio...


    Conseils associés
    Assurez-vous que la méthode est prise en charge.
    Il y a des méthodes qui ne sont pas prises en charge dans la classe de base et dont il est attendu qu'elles soient plutôt implémentées dans les classes dérivées. Si une classe dérivée implémente uniquement un sous-ensemble des méthodes de sa classe de base, elle lève une exception NotSupportedException pour les méthodes non prises en charge.

    Notes
    Lorsque vous utilisez le .NET Compact Framework et P/Invoke sur une fonction native, cette exception peut être levée dans les cas suivants :

    la déclaration dans le code managé est incorrecte ;

    le .NET Compact Framework ne prend pas en charge l'opération que vous tentez d'effectuer ;

    les noms de DLL sont tronqués lors de l'exportation.

    Dans ce cas :

    Recherchez toutes violations des restrictions P/Invoke du .NET Compact Framework.

    Recherchez tous les argument qui requièrent de la mémoire pré-allouée. Si vous en trouvez, vous devez passer une référence à une variable existante.

    Vérifiez que les noms des fonctions exportées sont corrects. Cette vérification peut être réalisée à l'aide de DumpBin.exe.

    Vérifiez que vous n'essayez pas de passer un trop grand nombre d'arguments

    En ce qui concerne le nom des fonctions je suis certaine qu'ils sont correct...


    Mais maintenant dans mon depends.exe je vois que j'ai 3 messgaes d'erreur
    Error: At least one file was not a 32-bit or 64-bit Windows module.
    Error: At least one required implicit or forwarded dependency was not found.
    Error: Modules with different CPU types were found.

Discussions similaires

  1. [AC-2007] Problème avec des DLL
    Par patanar dans le forum Access
    Réponses: 2
    Dernier message: 10/09/2014, 09h07
  2. [Dll & Déploiment] Problème avec des dll nonmanagée
    Par genki dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 27/03/2007, 09h32
  3. [vb.net]Problème avec des fichiers DLL
    Par nakata77 dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/09/2006, 18h40
  4. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26
  5. Réponses: 27
    Dernier message: 03/02/2003, 12h27

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