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
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
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
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
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
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ß
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.