wxwidgets und getopt
-
Hallo,
ich möchte in einem cpp-Programm mit wxwidgets (ich nutze wxSocketClient und wxServer) einen getopt(argc, argv) ähnlich wie in C verwenden.
Wie kann ich dies bewerkstelligen bzw wie kan ich auf argc und argv zugreifen?
jochen
-
Das wxApp-Objekt, von dem deine Anwendung ja abgeleitet ist, hat zwei Member-Variablen: argc und argv.
-
Die Klasse wxApp liefert dir argc und argv als public member.
Du kannst also in deiner von wxApp abgeleiteten Klasse direkt darauf zugreifen. Von ausserhalb musst du dir erst mit ::wxGetApp() eine Referenz auf deine Klasse holen.Edit:
Argh, zu langsam ;(.
-
[quote="Gordon73"]Die Klasse wxApp liefert dir argc und argv als public member.
Du kannst also in deiner von wxApp abgeleiteten Klasse direkt darauf zugreifen. Von ausserhalb musst du dir erst mit ::wxGetApp() eine Referenz auf deine Klasse holen.
Edit:
Argh, zu langsam ;(.[/quote]Hallo,
danke für die Hilfe, jedoch hakt es jetzt an einer weiteren Stelle, der getopt findet nichts, übergabe der Patameter wie in einem C-Programm, den getopt mit den Parametern aus dem C-programm "kopiert".
jochen
bool MyApp::OnInit() { char cParm = 0x00; while ((cParm=getopt((int)argc, (char* const*) argv, (const char*) "t:s:n:p:T:SvhD"))!=EOF) { fprintf(stdout,"%c\n\n",cParm); // hier kommt nichts mehr switch(cParm) { case 'T': .... } }
-
Ne, du kannst natürlich nciht getopt da einfach so verwenden.
Du müsstest dir mal die Doku zu wxApp ansehen, da steht drin wie du an die einzelnen elemente kommst:
http://docs.wxwidgets.org/stable/wx_wxapp.html#wxapp
-
joku schrieb:
Gordon73 schrieb:
Die Klasse wxApp liefert dir argc und argv als public member.
Du kannst also in deiner von wxApp abgeleiteten Klasse direkt darauf zugreifen. Von ausserhalb musst du dir erst mit ::wxGetApp() eine Referenz auf deine Klasse holen.Hallo,
danke für die Hilfe, jedoch hakt es jetzt an einer weiteren Stelle, der getopt findet nichts, übergabe der Patameter wie in einem C-Programm, den getopt mit den Parametern aus dem C-programm "kopiert".
jochen
bool MyApp::OnInit() { char cParm = 0x00; while ((cParm=getopt((int)argc, (char* const*) argv, (const char*) "t:s:n:p:T:SvhD"))!=EOF) { fprintf(stdout,"%c\n\n",cParm); // hier kommt nichts mehr switch(cParm) { case 'T': .... } }
getopt habe ich noch nie benutzt aber ich übergebe argc und argv (gecastet auf const char **) in meiner OnInit Methode genau so an einen eigenen Kommandozeilenparser und das funktioniert problemlos.
Was sagt der Debugger an der Stelle zu argc, argv und cParam?
-
Hallo,
mit wxCmdLineParser komme ich in Richtung Ziel, meinen gewohnten getopt aus unistd.h werde ich gegen wxCmdLineParser tauschen.
Ist in wsamples/console ausgeführt.Grob der Ablauf:
- wxCmdLineEntryDesc mit den Optionen und dem dazugehörigen Hilfetext anlegen, dabei wird noch gesagt, ob es sich um einen wxCMD_LINE_SWITCH oder wxCMD_LINE_OPTION (letztere mit Angabe des Typs date, string oder number)- Aufruf von wxCmdLineParser, anschliessend wxCmdLineParser::Parse(), im returncode wird gesagt, ob es sich um Hilfe oder einen parameter handelt, der kann dann mit wxCmdLineParser::found analysiert werden...
weiter bin ich noch nicht gekommen, es wird zZt nur ein Parameter erkannt.
jochen