none
dll et DWORD RRS feed

  • Question

  • bonjour à tous,

    je dois utiliser une dll depuis c# pour communiquer par USB avec un appareil de mesure.

    je n'ai que l'entête de la dll en c++
    DWORD (*getDeviceCount )( PCHAR pVID_PID )

    j'ai utilisé le DLLImport :
    [DLLImport("firmusbapi.dll")]
    mais j'ai ensuite des problèmes sur les arguments qui ne correspondent pas.
    public static extern int getDeviceCount( char [] pVID_PID);

    je débute avec c# et je pense que ce problème est courant mais je n'arrive pas à trouver de correspondance entre les types C++ et C#.


    mardi 19 mai 2009 08:34

Toutes les réponses

  • Essaye de compléter ta déclaration de la manière suivante :
     [DllImport("
    firmusbapi.dll"
    , CharSet=CharSet.Auto)
    
    Ensuite, change ton char[] en string.

    La plus grosse difficulté, c'est de comprendre que .NET travaille toujours en Unicode (2 octets/char) alors que le C++ est libre de décider comment gérer ses chaines de caractères. Dans le cas présent, le PCHAR utilise un octet par caractère. La déclaration CharSet= permet de spécifier les règles d'encodage ou de demander au marshaller de s'en occuper (c'est le cas ici).

    Tiens-moi au courant ...

    Xavier
    mardi 19 mai 2009 12:08
  • super merci pour l'info, voilà une énigme qui se résout.


    mais j'ai maintenant une exception à l'exécution : "impossible de trouver le point d'entrée "GetDeviceCount" dans la DLL "firmusbapi.dll""

    je commence à penser qu'il me manque pas mal de connaissances de bases.
    Elles se limitent à ce que j'ai pu trouver dans le visual c# 2008 de john sharp.

    le mieux est certainement que je me documente mieux.
    le professional c# 2005 chez wrox press, c'est bien ?
    mercredi 20 mai 2009 07:48
  • Change Auto en Ansi dans ta déclaration ...

    Je ne connais pas les livres dont tu parles, donc difficile de te donner un avis. Peut-être que ce lien t'aidera ? Il y a aussi la formation professionnelle car l'auto-formation a ses limites, en tout cas pour démarrer. Pour le perfectionnement, c'est autre chose.

    Xavier
    mercredi 20 mai 2009 08:08

  • mince oui ... c'est que ça ne marchait pas avec Ansi, alors j'ai essayé None et Auto .... pas mieux :-(

    merci pour le lien ... un bon filon !

    mercredi 20 mai 2009 12:26