2010-12-11 1 views
0

Я хочу иметь массив объектов SerialPort для каждого порта в системе. Моя идея состояла в том, чтобы сделать это таким образом:Как сделать массив классов из списка строк в C++, вопрос начинающих!

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); 
    } 
}; 

, но я новичок в C++/Windows-программирования. Итак, да, конечно, есть много ошибок. Может кто-нибудь исправить это (если сама идея не полная фигня) и рассказать мне несколько слов об ошибках?

Было бы хорошо, спасибо заранее.

+1

Это C++/CLI, а не C++. Вы нацеливаете управляемый или собственный код? –

+1

Этот код не является C++. Вы, кажется, очень смущены. –

+0

Да, может быть, я сделал это. случай, я просто не знаю разницу сейчас. задача состояла в том, чтобы сделать это только в visual-C++, чего я никогда раньше не использовал. поэтому я нашел несколько примеров в msdn и просто «переработал» их, я просто должен работать через учебник или что-то в этом роде. мы увидим – nico

ответ

0

Вы хотите фактически открыть каждый последовательный порт в системе, все с той же скоростью?

Вы не можете изменить длину массива, вам нужно создать совершенно новый и скопировать все данные, и это неэффективно, чтобы делать это каждый раз, когда вам нужно добавить другой элемент. Вместо этого я предлагаю использовать System::Collections::Generic::List, который позаботится обо всех динамических изменениях размера.

C++/CLI может напрямую ссылаться на собственные функции последовательного порта Windows, и я предлагаю вам это сделать, потому что класс .NET SerialPort - это кусок всего мусора, который заставляет вас в стиле программирования, который не вызывает ничего, кроме неприятностей. Конечно, вы захотите скрыть интерфейс Windows за собственным классом-оболочкой, но это стоит того.

+0

спасибо, этот класс-список действительно звучит интересным для моей проблемы. Я даже подумал, что моя идея не очень хорошая, но решения, которые я нашел, были такими же непригодными, как и тот, который вы сказали с копированием один к другому один за другим. – nico