c++ array Deklaration

Gast #296741
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
Persönliche Seite #296742
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
Gast #296743
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
Gast #296745
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
Gast #296747
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ß
Gast #296748
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
#296749
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren