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 :

[Novice] Du C vers le C#..


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Par défaut [Novice] Du C vers le C#..
    Bonjour,

    J'ai des connaissances assez empiriques en C/C++ et de même en .NET. Je dispose de code C (ci-dessous) et je voudrais savoir dans quelle mesure le faire fonctionner avec du C#. Une conversion pure et simple et possible ou... ?

    Pour info ceci est la definition de la structure de donnée du "pilote" d'une dalle tactile. A l'heure actuelle il s'agit d'une application console C++, mais je suppose qu'il serait plus "intéressant" et plus facile pour moi de ne programmer qu'en C#.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    # driver.h #
    
    #include "CSharedStruct.h"
    #include <stdio.h>
    #include <vector>
    
    #define MTOUCH_IPC_GUID "Global\\RNDPLUS_MTSharedData_10A0_A10AF_3124_0120"
    #define MTOUCH_EVENT_GUID "Global\\RNDPLUS_MTOUCHPOINT_IPC_INTERFACE_0401"
    #define MTOUCH_TOUCH_UP
    #define MTOUCH_TOUCH_DOWN
    #define MTOUCH_TOUCH_MOVE
    #define INACTIVE_COORDINATE 0x0000
    #define ACTIVE_COORDINATE 0x0001
    #define IMAGE_COORDINATE 0x0002
    
    typedef struct _MPoint
    {
    	WORD wStatus;
    	WORD wIndex;
    	WORD wXlength;
    	WORD wYlength;
           .....
    } MPointElement;
    
    #define MAX_MPOINTELEMENT_COUNT 100
    
    typedef struct _Shared
    {
    	DWORD dwState;
    	DWORD dwNumber;
    	DWORD dwNumberX;
    	DWORD dwNumberY;
        MPointElement mPpoints [MAX_MPOINTELEMENT_COUNT][MAX_MPOINTELEMENT_COUNT];
    } SharedData;
    
    DWORD ThreadProc(void);
    
    # driver.c #
    
    DWORD ThreadProc(void)
    {
    	HANDLE hTouch = INVALID_HANDLE_VALUE;	
    	while(hTouch == INVALID_HANDLE_VALUE)
    	{
    		hTouch = OpenEvent(EVENT_ALL_ACCESS, false, MTOUCH_EVENT_GUID);
            }
    ....
    }

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Syrus Voir le message
    Une conversion pure et simple et possible ou... ?
    Salut,

    personnelement, je suis plutot partisan de la reecriture "from scratch" dans ces cas-la...

    Ne serait-ce que pour aborder un programme avec un état d'esprit .net plutôt que c++ (pas de .h/.c en .net, pas de struct a moins d'avoir une bonne raison, etc...)

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Par défaut
    "from scratch" ?
    Ce qui me motive c'est que étant du issu du monde 100% objet (Java, AS3..), je devrais être beaucoup plus à l'aise en C#. Mais manipuler les structures de données C avec du C#... là je suis totalement dans le vide explicatif .

    J'ai oublié de préciser que actuellement mon code C/C++ utilise une "CSharedStruct" pour "partager" les données du pilote constructeur (je ne sais pas si je suis clair).

  4. #4
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut !
    Le code qui tu as écrit ici est tout a fait traduisible en C#, cependant ...
    C'est un driver, donc un language système sera surement requis, et à ma connaissance le C# n'en n'est pas un. Tu risque fort (j'ai bien dit "risque", et non "vas") de te retrouver face à des choses que tu ne peux pas écrire en .Net comme de VRAI pointeurs, des fonctions à appeller qui n'ont pas leurs pendant .Net, des bouts de codes en ASM, ...
    Et puis par définition un driver doit être le plus rapide et léger possible tout en ayant le moins de dépendance possible. En partant sur du .Net tu va vers un language semi-compilé, donc terriblement lent pour un driver, et extrêment consommateur (pour un driver) et en prime qui repose sur tout un framework (et pas un petit) dont l'installation est totalement optionnelle même si elle est effectivement de plus en plus necessaire.
    Je ne trouve vraiment pas que ce soit une bonne idée d'écrire un driver en .Net.
    Si tu veux conserver une orientation objet, le C++ est ce qu'il y a de mieux dans un cas comme celui-la.
    Même si le C++ te permet d'écrire un programme comme si tu faisait du C (pas d'objets), rien ne t'oblige à faire ainsi, c'est même plutot déconseillé. Tu peux t'imposer une règle de codage pour te "limiter" à du tout objet.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Je partage tout a fait l'avis de ctxnop !
    Cependant ayant fait moi meme ce saut C vers C# il y a moins d'un an, je peux te dire que j'ai asser facilement retranscrit plusieurs sources C en C# et que je suis TRES satisfait du resultat

    Mais au début il faut effectivement se battre un peu pour "revoir" tout ce qui se faisait avec des pointeurs (et j'en étais particulierement friand)

    L'avantage du pointeur en C c'est qu'il est explicite en Csharp il y a des tas de choses qui sont implicitement passées en référence

    Mais franchement ca vaut la peine !

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par olibara Voir le message
    en Csharp il y a des tas de choses qui sont implicitement passées en référence
    Tout ce qui est class ou ref struct en fait

    Bon sinon c'est clair, en C# on ne PEUT PAS faire de driver. Il ne s'agit pas de l'histoire de langage semi compilé (en fait, entièrement compilé en code machine mais juste avant l'exécution, pas à la compilation) mais plus du fait que c'est basé sur le Framework ... vous avez déjà essayé de faire tourner .NET et les WinForms en mode noyau ? .

    Ensuite, pour parler directement avec un driver ou utiliser des couches assez basses dans Windows, le C# c'est pas l'idéal parce que tu va te retrouver à réécrire la définition de toutes les classes/struct/interfaces/etc que tu utilises et ça fait un double travail. Dans ce genre de cas on préfère le C++/CLI : tu as toute la puissance de .NET tout en ayant la possibilité d'utiliser tout ce qui est possible en C++. Pour être vraiment tranquille en C# et parler au système il faut en général créer une dll "d'interop" (un wrapper quoi) pour faire la liaison entre win32 et .NET (qui pour l'instant est basé dessus mais on s'éloigne ).

    Par contre s'il s'agit d'utiliser des fonctions natives de temps en temps (mais vraiment, de temps en temps genre juste pour un petit MoveWindow par exemple), alors tu peut te servir du site pinvoke.net pour avoir la déclaration des fonctions à importer et t'en servir librement.

    Enfin, si tu veux faire une application qui est à un niveau raisonnable (pas le genre d'applis qui trafiquent en permanence sur tes fonctions de ntdll ou autres) alors le C# est beaucoup plus "simple" en pratique que le C/C++ (je parle surtout des pointeurs qui sont absents, la facilité avec les string, etc.) Bien sur, certains (malades comme dirait mon prof ) sont très à l'aise en C++ mais le C# évite beaucoup d'erreur que l'on peut rencontrer avec les pointeurs ou autre mais sur le point des applications "normales" le C# vaut le C++ mais il vaut mieux recommencer à 0 pour avoir quelque chose de propre et entièrement .NET et pas des choses mystérieuses héritées d'un code C++.

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/08/2008, 14h22
  2. Réponses: 5
    Dernier message: 09/06/2008, 13h07
  3. Réponses: 2
    Dernier message: 09/06/2007, 14h50
  4. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  5. Réponses: 1
    Dernier message: 13/05/2002, 09h19

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