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 :

NativeFramework : Portage de classes .NET en C++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut NativeFramework : Portage de classes .NET en C++
    Bonjour,

    je souhaiterais porter une classe .NET en classe C++(en fait je viens de commencer un projet qui vise à implémenter en C++ les classes les plus importantes de .NET).

    JE commence par celles que j'utilise en ce moment et il s'agit de la hgestion de processus System:iagnostics:rocess.
    En code c++ managé je peux faire ce genre de choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array<Process^>^localAll = Process::GetProcesses();
    en code natif je dois faire un équivalent du array et pour le moment j'utilise la STL donc je me demande si faire un truc su genre serait judicieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename Ptr> 
    class Array : public vector<Ptr> 
    { 
     
    };
    Il faudrait egalement que lorsque mon object est détruit il désalloue ma mémoire.
    Mais comment est sur que ma classe Array ne prendra que des pointeurs, ...

    Pour le moment la classe ressemble a ca :
    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
     
    #include <vector>
    using namespace std;
     
    namespace System{
        namespace Diagnostics{
     
    class ProcessStartInfo
    {
    public:
        friend class Process;
     
        ProcessStartInfo();
     
    protected:
        PROCESS_INFORMATION        m_sProcessinfo;
    };
     
     
     
    class Process
    {
    public:
     
        Process(void);
        ~Process(void);
     
    public:
        //static vector<Process>    GetProcesses();
        static void                Start(LPCTSTR tszName);
        //void                    Start(ProcessStartInfo& procinfo);
        CString                    GetProcessName();
        DWORD                    GetId();
     
    protected:
        //static Process*            m_pThis;
     
        static ProcessStartInfo    m_ProcessStartInfo;
    };
     
     
     
    } //Diagnostics
    } //System
    Le but étant par la suite de faire quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Process *pProcess = NULL;
    Array<Process> processes = Process::GetProcesses();
     
    for (int i = 0; i < processes.GetCount(); ++i){
     
         pProcess = processes[i];
         pProcess->Kill();
    }
    Bon en gros j'ai besoin de votre avis sur comment implémenter en code natif C++ le container Array.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut
    J'ai essayé ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template<typename T> class Array : public vector<T*>
    {
    public:
        ~Array() {
            for (size_t i = 0; i < size(); ++i)
                delete at(i);
        }
    };
    LE probleme c'est dans GetProcesses parceque lorsque la methode retourne le vecteur processes est detruit et ce qui est retourné est nulle.
    On m'a parlé de shared_ptr et apparemment je ne vais pas avoir le choix...


    Quelqu'un a une autre idée pour faire ca ????
    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
     
    Array<Process>    Process::GetProcesses()
    {
        Array<Process> processes;
        HANDLE            hSnap;
        PROCESSENTRY32    pe;
        BOOL            bOk;
        Process*        process;
     
        // Envoi de la liste des process
        hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        pe.dwSize = sizeof(PROCESSENTRY32);
        bOk = Process32First(hSnap,&pe);
     
        while(bOk)
        {        
            process = new Process( );
            processes.push_back( process );
            bOk = Process32Next(hSnap,&pe);
      }
     
        CloseToolhelp32Snapshot(hSnap);
     
     
        return processes;
    }
    Citation Envoyé par romeo9423
    Bonjour,

    je souhaiterais porter une classe .NET en classe C++(en fait je viens de commencer un projet qui vise à implémenter en C++ les classes les plus importantes de .NET).

    JE commence par celles que j'utilise en ce moment et il s'agit de la hgestion de processus System:iagnostics:rocess.
    En code c++ managé je peux faire ce genre de choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array<Process^>^localAll = Process::GetProcesses();
    en code natif je dois faire un équivalent du array et pour le moment j'utilise la STL donc je me demande si faire un truc su genre serait judicieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename Ptr> 
    class Array : public vector<Ptr> 
    { 
     
    };
    Il faudrait egalement que lorsque mon object est détruit il désalloue ma mémoire.
    Mais comment est sur que ma classe Array ne prendra que des pointeurs, ...

    Pour le moment la classe ressemble a ca :
    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
     
    #include <vector>
    using namespace std;
     
    namespace System{
        namespace Diagnostics{
     
    class ProcessStartInfo
    {
    public:
        friend class Process;
     
        ProcessStartInfo();
     
    protected:
        PROCESS_INFORMATION        m_sProcessinfo;
    };
     
     
     
    class Process
    {
    public:
     
        Process(void);
        ~Process(void);
     
    public:
        //static vector<Process>    GetProcesses();
        static void                Start(LPCTSTR tszName);
        //void                    Start(ProcessStartInfo& procinfo);
        CString                    GetProcessName();
        DWORD                    GetId();
     
    protected:
        //static Process*            m_pThis;
     
        static ProcessStartInfo    m_ProcessStartInfo;
    };
     
     
     
    } //Diagnostics
    } //System
    Le but étant par la suite de faire quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Process *pProcess = NULL;
    Array<Process> processes = Process::GetProcesses();
     
    for (int i = 0; i < processes.GetCount(); ++i){
     
         pProcess = processes[i];
         pProcess->Kill();
    }
    Bon en gros j'ai besoin de votre avis sur comment implémenter en code natif C++ le container Array.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut
    Bon en fait les shared_ptr sont exactement ce dont j'ai besoin. Ca a l'air super puissant!!!!



    Citation Envoyé par romeo9423
    J'ai essayé ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template<typename T> class Array : public vector<T*>
    {
    public:
        ~Array() {
            for (size_t i = 0; i < size(); ++i)
                delete at(i);
        }
    };
    LE probleme c'est dans GetProcesses parceque lorsque la methode retourne le vecteur processes est detruit et ce qui est retourné est nulle.
    On m'a parlé de shared_ptr et apparemment je ne vais pas avoir le choix...


    Quelqu'un a une autre idée pour faire ca ????
    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
     
    Array<Process>    Process::GetProcesses()
    {
        Array<Process> processes;
        HANDLE            hSnap;
        PROCESSENTRY32    pe;
        BOOL            bOk;
        Process*        process;
     
        // Envoi de la liste des process
        hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        pe.dwSize = sizeof(PROCESSENTRY32);
        bOk = Process32First(hSnap,&pe);
     
        while(bOk)
        {        
            process = new Process( );
            processes.push_back( process );
            bOk = Process32Next(hSnap,&pe);
      }
     
        CloseToolhelp32Snapshot(hSnap);
     
     
        return processes;
    }

Discussions similaires

  1. [debutant] ASP.NET et portage application VB.NET
    Par sammy1988 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/04/2010, 09h14
  2. Utiliser une classe .net en c++/win32
    Par gandf dans le forum C#
    Réponses: 1
    Dernier message: 28/03/2010, 17h48
  3. Réponses: 2
    Dernier message: 17/08/2009, 12h13
  4. Réponses: 12
    Dernier message: 04/10/2006, 15h53

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