Fragen zur Machbarkeit in C/C++

Hallo sheel,

danke für die Antwort, weil nun bin ich auf jeden Fall sicher, daß es auch mit der "Visual Studio" Version nicht anderst ist und man bei allen von MS angebotetenen Programmen da mit CLI vorlieb nehmen muß. Weil für mich ist es schon schwierig genug mit C++ klar zu kommen, wobei ich ja eigentlich nur einen kleinen Teil erlerne oder mir zu Nutze mache. Weil ich ja kein C++ Programmierer im Sinne des Wortes werden will, sondern nur mal selbst ein Programm erstellen möchte. Wobei das Programm-Gerüst soweit automatisch durch den Designer erstellt wird und ich nur die nach einem Ereignis benötigten Programmzeilen selbst einfügen muß. Bin nun dabei mich über CLI schlau zu machen. Bücher hierzu habe ich nur in englischer Sprache finden können. Habe schon ein Buch "Pro Visual C++/CLI and the .Net" in meinem Besitz und ein Weiteres habe ich geordert. Der Titel ist "// step by step, Microsoft C++/CLI". Wird wahrscheinlich wieder des Guten zu viel sein, aber ich will es ebend wissen, damit ich die Referenzen zum klassischem C++ habe. Denn nun bleibe ich wie ich schon angedeutet hatte bei der "Visual .... Express-Version," denn nun nochmal auf Qt umzusteigen, damit wäre ich mehr als überfordert.
Wobei es sicherlich im Prinzip genau so abläuft, nur das man hier die einzufügenden Zeilen, direkt in reinem C++ schreiben kann. Aber das viele drumherum, was anderst ist, daß stört mich. Ich kenne mittlerweile das
Buch "Jetzt lerne ich Visual C++ 2010" fast auswendig. Danach kommen mir das Qt total fremd vor, liegt natürlich an den vielen anderen englischen Bezeichnungen. Damit tue ich mich natürlich schewer, weil ich das Englische nicht so gut beherrsche. So nun nochmals Danke und bis bald mal wieder.

Viele Grüsse

Duda
 
Hallo Cromon und alle welche mir Antwort geben können!

Ich möchte nochmal auf die Codezeilen auf Seite 1 #11 zurückkommen. Will mich nur kurz rückversichern, damit auch alles richtig mache.
1. Frage: "Wenn ich die Worte "input" gegen "textBox" austausche, welches ein vom Visual-Designer vorgegebener Name des Eingabefeldes ist, was ja auch meine "eingabeZeile(input" ist, wäre damit meine Tastatureingabe erstmal geregelt oder nicht"?
2. Frage: "Bei std::string hex = " .............. "; hier hat das Wort "hex" doch keine besondere Bedeutung, denn es ist nur der Stringname. Hier könnte auch jeder andere Name stehen, wobei natürlich auch das "hex" in den Klammern hinter "parseNumbers" mit dem anderen Namen ausgetauscht werden müßte, ist das soweit ok?
3. Frage: "Nochmal kurz zurück zu std::string hex = " ......... "; Muß hierfür std::string hex = textBox; geschriében werden. Damit meine ich das der String deklariert wird und gleichzeitig die Eingabe(textBox) zugewiesen wird. Oder wie anderst kommen die Werte in den String"?
Wenn die Antwort ist: "Durch die Zeile unter std::string hex = " ....... ";
dann hat sich meine Frage damit erledigt. Alles andere ist für mich klar und nachvollziehbar. Ich denke, es muß für die "Eingabefelder/eingabeZeilen/textBox" des "Form1" als Erstes ein "leerer String" im Code deklariert werden, welchem danach die "textBox" zugewiesen wird. Damit wäre das Einlesen/input erledigt und die Stringwerte könnten im Programm verarbeitet werden.
Ich mache mal Schluß hier und hebe mir noch ein paar Fragen für ein anderes Mal auf.

Viele Grüsse

Duda
 
Hi,

1: Leider ganz und gar nicht.
Einerseits verwechelst du die Textbox mit dem Funktionparameter:
Beim Aufrufen der Funktion muss ein Wert übergeben erden, das kann der Inhalt der Textbox sein.
Der Parameter selbst kann aber nach wie vor input heißen. (Und der Textbox einen sinnvollen Namen geben,
je nachdem, wozu sie gut ist, schadet auch nicht).
Andererseits ist das der erste große Problempunkt an C++/CLI:
Man muss bei jeder Verwendung von CLI-Variablen in echtem C++ oder umgekehrt "Umwandlungen" durchführen,
mehr zu lesen hier (auf Englisch): http://msdn.microsoft.com/en-us/library/bb384865.aspx
System::String zu const wchar_t zu std::wstring und eventuell noch Zeichensatzumwandlungen...

2: Stimmt

3: Siehe 1.
 
Hi sheel,

habe ich mir schon fast gedacht. Ja an einen aussagekräftigen Namen für die vom Designer vorgegebenen Benennung, das wird natürlich nicht vergessen. Du bist glaube ich nicht der Erste, welche mich darauf hinweist.
Aber trotzdem danke für Deine Antworten.
Habe schon festgestellt, daß es nicht ohne Probleme abgeht beim Umwandeln von C++-Code in CLI-Code. Außer zu "void", hat schon es schon eine ganze Weile gedauert, bis ich was zu "parse" und "vector" gefunden habe. Was bei CLI für "Parse" angeboten wird ist mir zur Zeit noch unverständlich, aber habe sowas wie "regex_split" und "regex_parse"
gelesen. Die Zeilen darunter muß ich noch genauer in Augenschein nehmen. Ich denke es wird schon schwierig sein den schönen Code von Cromon und den nicht weniger schönen Code von ComFreek in CLI umzumünzen. Ich habe zwar mittlerweile das Buch "//Step by step-Microsoft Visual C++/CLI", aber es ist schwer verständlich für mich. Aber in Bezug auf "vector" und "unsigned char" steht da so Einiges, was ich mir zu Gemüte ziehen muß. So nun werde ich mal den von Dir aufgezeigten Link anklicken, mal sehen, was es da so gibt. Also nochmal danke und bis bald.

Viele Grüsse

Duda
 
Ich meinte nicht, C++ in C++/CLI zu übersetzen (was sowieso nicht allgemein möglich ist).
Marshalling wird im Link oben beschrieben: Es geht darum, CLI-Variablen in C++-verträgliche Form zu bringen
(und auch umgekehrt).
 
Hi sheel,
ja ich habe mittlerweile auch gemerkt, daß es extrem schwierig sein wird die Codes, welche ich vor mir liegen habe, so zu übersetzen, daß er für das Window-Programm-Gerüst lauffähig wird. Wie Du schon schreibst ich müßte (und auch umgekehrt), was bei mir der Fall ist.
Habe mich soweit ich es lesen konnte,
über "Marshal" sowie "Calling Native Funktions from Managed Code"
versucht mich schlau zu machen. Habe mir auch mal"marshal_as_test.cpp" abgeschrieben. Wodurch ich da mehr und mehr zu der Meinung komme,
das diese Hinweise nur dem Visual Studio 2010/2012 dienen und nicht der Express-Version. Weil die dateien.h, welche da angeführt werden sind nur in der Professionell-Version enthalten und arbeiten auch nur mit Professionell zusammen. Habe mal versucht eine Library in die Express-Version zu laden, was nicht ging, weil der Download nach einer Vollversion fragt. Das Gleiche wird auch mit folgenden Dateien der Fall sein: <msclr\marshal.h>, <msclr\marshal_window.h>, <msclr\marshal_cppstd.h> oder mit <msclr\narshal_atl.h>, somit kann der
verlangte Namespace: msclr::introp nicht benutzt werden, welcher in der
<msclr\marshal.h> enthalten ist. Schade aber auch kann ich da nur sagen.
Es hat alles so schön mit Express angefangen, aber es wird nun wohl doch mit Express zu Ende gehen.
Und wenn ich mich erstmal so richtig ärgere, dann wars das mit Microsoft und ich steige noch auf Qt um, weil da brauche ich mir keinen Kopf zu machen was mit C++ möglich ist. Da muß ich mich nur in Qt richtig einlesen(dauert bei mir Tage, aber egal) und auch so ein schönes Visual-Programm-Gerüst erstellen.
Vielleicht wäre es wirklich besser gewesen und ich hätte den Ratschlag zu Linux direkt angenommen. Sicherlich wäre es für jemandem, der die englische Sprache beherrscht, ein akzeptabeler Vorschlag gewesen, aber ich habe es wegen meinem schönem Buch in deutscher Sprache, einfach nicht akzeptieren wollen. Nun bin ich in der Zwickmühle und komme wohl da nur raus, wenn ich den Weg zur klassischen C++-Programmierung finde. Auch wenn ich mir gern die Mehrarbeit mit CLI gemacht hätte, aber mein Antrieb in diese Richtung läßt nach, denn das Englisch demoralisiert mich. Nicht nur die Bücher, sondern auch alle Sites im Internet sind zu C++/CLI in der mir ungeläufigen Sprache. Und nun muß ich nochmal den Sprung ins kalte Wasser wagen und Qt kennenlernen, was aber auch Englisch ist. Wenn jemand einen Rat hat, wo, wie, was ich dazu runterladen muß, damit ich in etwa die gleiche Basis habe, wie mit der Express-Version, für eine solche Info bedanke ich mich schonmal im Voraus.

Viele Grüsse

Duda
 
Hi Duda,

hab mir jetzt mal das Ganze hier durchgelsen du kannst doch einfach mal probieren ob das wirklich alles an der Expressversion liegt und dir eine Testversion der Professional runterladen, da sind immerhin 90 Tage Testperiode dabei:

http://www.visualstudio.com/downloads/download-visual-studio-vs#professional

und so wie sich das teilweise anhört könnte die ganze Geschichte in 90 Tagen über die Bühne sein.

Viele Grüße
Youza
 
Hallo Youza,

danke für Dein Durchlesen und dem anschliessendem Feedback mit dem Link. Es liegt natürlich nicht nur an der Express-Version. Es liegt ganz einfach daran, daß ich mich da in etwas verrannt habe, was nicht so ohne Weiteres von einem unwissenden Grünschnabel umgesetzt werden kann.
Aber ich lerne ebend noch was dazu. Was ich mit Hilfe einiger Mitglieder aus diesem Forum und natürlich mit googeln über C++ lernen konnte, das reicht alle mal um das Programm in reinem C++ zu schreiben, aber ich stelle es mir wesentlich einfacher vor, wenn die Anwendereingaben über ein Fenster-Formular getätigt werden können. Dabei hänge ich nun bei der Umsetzung von C++ in C++/CLI. Weil sich da doch nicht alles 1 zu 1 umschreiben läßt, wobei ich anfangs der Meinung war, es bedarf nur einer Referenz. Dem ist nicht und ich muß mich damit erstmal abfinden. Habe mich auch mal etwas über Qt informiert, aber ob sich ein Umstieg darauf lohnt, da bin ich mir nicht ganz sicher. Es ist nur ein neuer Lernaufwand,
was ich im Prinzip eigentlich nicht will. Ich bleibe bei C++ und irgendwie wird es schon gehen. Und wenn es mit einer 90 Tage Version ist.
Also nochmals danke und machs gut.

Grüsse

Duda
 
Hi sheel,

habe natürlich gelesen was Du geschrieben hast. Ich meine damit das hier: "System::String zu const wchar_t zu std::wstring und eventuell noch Zeichenumwandlungen".
Das Eingabefeld auf "Form1", ist ein String mit Namen "textBox1". Ich beziehe mich jetzt mal nicht auf CLI, sondern auf C++, also wenn ich jetzt
einen leeren String deklariert hätte, welcher an Stelle von "textBox1" den Namen "input" hätte, dann müßte ich doch mit dem Beispiel von Cromon
Zugriff auf die in "input" eingegebenen Werte/Text bekommen.
Nur mal kurz zwei, drei Zeilen:
void parseNumbers(const std::string & input, std::vector<unsigned char> & values)
{
std::stringstream stream;
stream<<input;
// und so weiter
}
Was ich meine, ist: "Hier findet mit input die Übergabe der Werte statt,
oder ist es nicht so. Wenn man das nach CLI bringen möchte, dann habe ich eigentlich nur die Probleme bei "parseNumbers". Okay, es muß "System::String" geschrieben werden, wobei eventuell noch das carat oder ein Asterisk eine Rolle spielt. Bei "vector" nur noch ein grosses V und bei values auch. In den anschliessenden Zeilen habe ich zu "std::stringstream stream;" noch nichts gefunden außer: MemoryStream, liest und schreibt streams/bytes an und vom Speicher. Nur Stream, ist die abstrakte Basis der stream classes. Ja für den Value type ist "Byte" angesagt, was ein 8-bit unsigned integer ist, welcher als "unsigned char" geschrieben wird.
Ich weiß auch noch nicht, was ich mit "cur" bei CLI vor "Value" anfangen soll. Aber vielleicht einfach weglassen. Kurze Frage muß das "Byte" an die Stelle von Values und curValue, oder wie kann ich das verstehen.
Nun mache ich erstmal wieder Schluß und hoffe, daß schonmal jemand von den Mitgliedern sowas auf die Reihe gebracht hat und deshalb was dazu schreiben kann. Danke im Voraus dafür.

Viele Grüsse

Duda
 
Du machst es dir wohl gern zu schwer :/
Wenn du nicht vorhast, überhaupt noch reines C++ zu verwenden
vergiss das CLI und programmiere C# ...
 
Zuletzt bearbeitet:
Zurück