Forum: PC-Programmierung c++ array Deklaration


von cpt (Gast)


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

von Μαtthias W. (matthias) Benutzerseite


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

von cpt (Gast)


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

von cpt (Gast)


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

von cpt (Gast)


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

von Manuel B. (Gast)


Lesenswert?

(entfernt)

von Daniel Mehrwald (Gast)


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ß

von volly (Gast)


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

von Christoph _. (chris)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.