www.mikrocontroller.net

Forum: PC-Programmierung c++ array Deklaration


Autor: cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Bis jetzt habe ich eigentlich nur in C programmiert und will jetzt mal
ein bischen in C++ reinschaun. Jetzt habe ich Visual C++ Express
runtergeladen und spiele etwas damit herum. Zum ansteuern der seriellen
Schnittstelle ist eine Komponente enthalten, die allerdings in ihrer
Write Routine eine eigenartiges array erwartet.
Bisher habe ich "unsigned char BytesToSend[3];" benutzt. Nun will der
Compiler allerdings nicht und sagt:
"Write(cli::array<Type,dimension> ^,int,int)' : cannot convert
parameter 1 from 'unsigned char' to 'cli::array<Type,dimension>
^'"
Die Definition dieser Art Array sagt mir nichts und ich komme mit der
Online Hilfe auch nicht so richtig weiter. Hat hier vielleicht jemand
einen Tipp wie ich das vernünftig lösen könnte.

Cpt

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

vorneweg:
Wenn du mit den .NET Klassen (nichts anderes ist cli::array und die von
dir verwendete SerialPort) arbeiten willst solltest du dich von (in dem
Fall managed) C++ lösen. Das ist nicht die Sprache der Wahl. Schau dich
nach C# um. Da ist das deutlich einfacher.

Wenn du
ms-help://MS.NETFramework.v20.en/dv_vclang/html/301cfb3e-199f-42c8-8151- 
629dce9e87f3.htm
in deinen Internet Explorer eingibst (auf einem PC mit .NET 2.0 SDK)
erhälst du Beispielcode zur Verwendung von cli::array. Wenn du das dann
gesehen hast und weiterhin bedenkst das das in C# so aussieht:

byte[] tmp = new byte[4];
tmp[0] = (byte)'W';
tmp[1] = (byte)(addr / 256);
tmp[2] = (byte)(addr % 256);
tmp[3] = (byte)(data % 256);

mPort.Write(tmp,0,4);

dann wirst du wahrscheinlich auch sehen warum ich dir dringend zu C#
oder aber zum Verzicht auf .NET Klassen aus C++ heraus rate :-)

Matthias

Autor: cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm also mit:

unsigned char one = 255;
unsigned char two = 1;
unsigned char three = 125;

array<unsigned char,1>^ gc = {one, two, three};

wird es akzeptiert allerdings muß ich noch schauen wie man auf das
Array nach der Initialisierung zugreift und was das ganze bedeutet bzw
wo der Unterschied ist weiß ich auch noch nicht ...

Ach und wenn ich schonmal dabei bin:
Wie sage ich in C++ 125 ist kein int sondern unsigned char ohne die
lästige Sache mit den 3 unnötigen Variablen?

Danke schonmal

Cpt

Autor: cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach den ganzen Mist habe ich .NET zu verdanken ... hmmm
Da muß ich mal schaun ob ich nicht eine bessere Lösung anvisiere und
den .NET mist in die Tonne hau :-)

Danke
Cpt

Autor: cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So das funzt jetzt erstmal (jedenfalls wird es kompiliert):

array<unsigned char,1>^ BytesToSend;

BytesToSend[0] = 255;
BytesToSend[1] = 1;
BytesToSend[2] = 125;
          serialPort1->Write(BytesToSend,0,3);

Aber jetzt mal zu der Frage ist das mit dem .NET überhaupt sinnvoll
oder sollte ich lieber auf Standart C++ und Windows API Calls setzen ?

Cpt

Autor: Manuel B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(entfernt)

Autor: Daniel Mehrwald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi all

Geht doch auch unter C++ ganz einfach, wäre ja gelacht wenn's mit dem
Ferrari unter den Programmiersprachen nicht einfacher gehen könnte.

array<unsigned char,1>^ BytesToSend = {0xFF, 0x01, 0x7D};

serialPort1->Write(BytesToSend,0,3);

oder

array<unsigned char,1>^ BytesToSend = {255, 1, 125};

serialPort1->Write(BytesToSend,0,3);

da die .Net Klasse diesen Namespace verlangt kannst du da nicht drüber
weg. Aber die Serial Class ist eigentlich schon ziehmlich genial, ich
würd jetzt nicht extra umsteigen, da es ja eh einfach geht.

Gruß

Autor: volly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Cpt,

also wenn Du einen C++ Compiler brauchst, nimm doch einfach den
GNU-Compiler, der ist sicherlich millionenfach bewährt. Das Ganze ist
in Dev-Cpp ziemlich gut integriert:

http://www.bloodshed.net/devcpp.html

Bei Microsoft ist die Integration etwas müßig, die Version heißt auch
gemanged, weil sie versucht haben die MFC und .Net auf C++ zu
integrieren. Der Code, der dann rauskommt, ist nach meiner Meinung ein
vollkommendes Durcheinander. Einerseits wird die MFC über include
eingebunden und .Net über die namespaces.

Wie voran schon erwähnt, ist C# hier die bessere Alternative. Der
Umstieg von C++ ist C# ist zwar etwas gewohnungsbedürftig, aber es
lohnt sich. Auch die GUI-Erstellung unter C# ist ein Traum -- im
Gegensatz zur MFC.

Gruss
Volly

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bei Microsoft ist die Integration etwas müßig, die Version heißt
> auch gemanged, weil sie versucht haben die MFC und .Net auf
> C++ zu integrieren.

Man kann natürlich auch beim aktuellen Visual Studio ein "normales",
.NET-freies C++-Projekt erstellen, und zwar völlig problemlos und mit
voller Unterstützung der IDE, z.B. in den Punkten Klassenansicht und
IntelliSense. Dass Microsoft C++ nur noch .NET-verseucht als
"managed" zulässt, ist eine urban legend.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Tat. Die neueren C++-Compiler von Microsoft sind so
standardkonform, daß damit auch mit boost gearbeitet werden kann ...
und wenn man sich die MFC nicht antun will, genügt auch die kostenlos
herunterladbare Variante des Visual Studio 2005.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.