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 :

Passage de C a C#, dur dur!


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut Passage de C a C#, dur dur!
    bonjour,
    je suis obligé de me mettre a C#, et je passe mon temps a buter, en effet plein de choses on disparu dans C# par rapport a C.
    Voila mon problème actuel:
    le code en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD GPSGetDeviceState(  GPS_DEVICE *pGPSDevice);
    une fonction toute bête qui demande un pointeur sur une structure.
    la structure étant définie par (toujours en C):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct _GPS_DEVICE {
       DWORD    dwVersion;
       DWORD    dwSize;
       DWORD    dwServiceState;
       DWORD    dwDeviceState;
       FILETIME ftLastDataReceived;
       WCHAR    szGPSDriverPrefix[GPS_MAX_PREFIX_NAME];
       WCHAR    szGPSMultiplexPrefix[GPS_MAX_PREFIX_NAME];
       WCHAR    szGPSFriendlyName[GPS_MAX_FRIENDLY_NAME];
    } *PGPS_DEVICE, GPS_DEVICE;
    en C# j'ai écrit pour la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int GPSGetDeviceState(IntPtr pGPSDevice);
    En C# je bricole un truc comme cela sans rien comprendre:
    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
            struct FILETIME {
                Int32 dwLowDateTime;
                Int32 dwHighDateTime;
                }
     
            struct GPS_DEVICE {
                Int32    dwVersion;
                Int32    dwSize;
                Int32    dwServiceState;
                Int32    dwDeviceState;
                FILETIME ftLastDataReceived;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst=GPS_MAX_PREFIX_NAME)]
                public string szGPSDriverPrefix;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = GPS_MAX_PREFIX_NAME)]
                public string szGPSMultiplexPrefix;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = GPS_MAX_FRIENDLY_NAME)]
                public string szGPSFriendlyName;
            }
    je ne sais pas si c'est bon, et ensuite je ne sais pas non plus comment passer un pointeur sur une structure pour pouvoir appeler la fonction GPSGetDeviceState!!
    Je viens d'ingurgiter des pages et des pages de tutoriaux sur C#, mais je ne trouve pas, d'ailleurs je ne comprends pas bien la raison de C#, m'enfin ça c'est une autre histoire J'ai pas le choix alors je faits avec la mort dans l'ame

    Merci de votre aide

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Euh, il faut dire que si tu commences à attaquer le C# par l'interop, tu cherches pas la facilité

    Quel est ton but ? Coder en pur C# ou bien en mix C/C# ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Je dois programmer des trucs pour téléphone avec Windows Mobile, et entre le VB et C#, je choisis le moins pire
    En fait j'ai l'impression que la philosophie C# est bien différente de celle de language comme C ou Pascal (mon préféré).

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Tu ne réponds pas à ma question...

    Le code que tu présentes se justifierait si tu voulais faire interagir du C# avec du C. Sinon, pas besoin de IntPtr, MarshaltrucMuche & co.

    Je répète donc Veux tu coder en pur C# ou en faisant de l'interopabilité avec des bibliothèques / du code C ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    OK, en fait j'ai ces bouts de code en C, mais je veux ecrire un ou plusieurs programmes en C# complètement. Comme je ne veux pas tout réinventer, je voulais adapter mes bouts de code en C pour du C#, et au final du C# pur.

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    ok Tu as plutot besoin de mater les tutoriaux, la difference principale entre c et c# etant la POO, mais par exemple, ta struct devient :
    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
    class GpsDevice {
       int    dwVersion;
       int    dwSize;
       int    dwServiceState;
       int    dwDeviceState;
       DateTime ftLastDataReceived;
       string GPSDriverPrefix;
       string GPSMultiplexPrefix;
       string GPSFriendlyName;
    } 
     
    public int GPSGetDeviceState(GpsDevice device)
    {
     // ton code
    }
    La fonction pourrait meme etre un fonction membre de la classe, ca depend de ce qu'elle fait.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Le problème est que la fonction que je dois appeler est définie comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [DllImport("gpsapi.dll")]
            static extern int GPSGetDeviceState(IntPtr pGPSDevice);
    Donc j'ai pas le choix sur le moyen d'appeler la fonction, de plus j'ai pas le choix sur la taille de la structure, les string sont de taille fixe.

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Ah oui tu cherches donc bien à faire de l'interop.

    Je te conseille d'aller voir du côté du forum dédié à l'interactif managé / non managé : http://www.developpez.net/forums/forumdisplay.php?f=270

    Tu auras probablement plus de détails là-bas.

Discussions similaires

  1. passage à as3 dur dur
    Par sebairo dans le forum Flash
    Réponses: 1
    Dernier message: 29/11/2009, 14h16
  2. [MySQL] Requête imbriquée dur dur
    Par nebil dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 08/07/2006, 12h26
  3. Pthread et stdio dur dur
    Par greg13 dans le forum Linux
    Réponses: 3
    Dernier message: 21/03/2006, 22h56
  4. Dur dur Mandriva et Nvidia
    Par Cazaux-Moutou-Philippe dans le forum Mandriva / Mageia
    Réponses: 5
    Dernier message: 19/03/2006, 03h07
  5. [hard core] requête dur dur
    Par heid dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/02/2006, 11h39

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