2010-12-11 64 views
0

Je souhaite disposer d'un tableau d'objets SerialPort pour chaque port du système. Mon idée était de faire de cette façon:Comment faire un tableau de classes à partir d'une liste de chaînes en C++, question des débutants!

public ref class CommunicatorClass 
{ 
private: 
    static array<SerialPort^>^ _serialPortList; 

public: 
    static void Main(){ 
//   _serialPortList->Initialize; 
     for each (String^ s in SerialPort::GetPortNames()) 
     { 
      Console::WriteLine(" {0}", s); 
      AddListItem(s); 

     } 
    } 

    static void AddListItem(String^ s) 
    { 
     // Get the length 
     _serialPortList->Length = _serialPortList->GetLength + 1; 

     _serialPortList[_serialPortList->GetLength] = gcnew SerialPort(s, 9600); 
    } 
}; 

mais je suis complètement nouveau pour C++/Windows programmation. Donc, oui, bien sûr, il y a beaucoup d'erreurs. Quelqu'un peut-il corriger s'il vous plaît (si l'idée elle-même n'est pas une connerie complète) et me dire quelques mots sur les erreurs?

Serait gentil, merci d'avance.

+1

Ceci est C++/CLI, pas C++. Voulez-vous cibler le code géré ou natif? –

+1

Ce code n'est pas C++. Vous semblez être très confus. –

+0

oui, peut-être, je l'ai fait. le cas est, je ne sais pas la différence maintenant. la tâche était juste de le faire en visual-C++, que je n'ai jamais utilisé auparavant. J'ai donc trouvé quelques exemples dans le msdn et juste "retravaillé" eux je dois juste travailler à travers un tutoriel ou quelque chose. nous allons voir – nico

Répondre

0

Vous voulez réellement ouvrir chaque port série sur le système, tous à la même vitesse de transmission?

Vous ne pouvez pas modifier la longueur d'un tableau, vous devez en créer un nouveau et copier toutes les données, et il est inefficace de le faire chaque fois que vous devez ajouter un autre élément. Je suggère d'utiliser System::Collections::Generic::List à la place, qui prend soin de tout le redimensionnement dynamique pour vous. C++/CLI peut appeler les fonctions du port série Windows natif directement, et je vous suggère de le faire, car la classe .NET SerialPort est un morceau de poubelle totale qui vous oblige à un style de programmation qui ne cause que des problèmes. Bien sûr, vous voudrez cacher l'interface Windows derrière votre propre classe d'emballage, mais cela en vaut la peine.

+0

merci, cette liste-liste semble vraiment intéressante à mon problème.je pensais même avant, que mon idée n'était pas vraiment bonne, mais les solutions, j'ai trouvé, étaient aussi inadaptées que celle-ci, vous avez dit avec copie l'un à l'autre, un par un. – nico