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':
                      ....
       }
      }
    

  • Mod

    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


Anmelden zum Antworten