{"id":359,"date":"2008-11-09T19:42:09","date_gmt":"2008-11-09T18:42:09","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=359"},"modified":"2008-11-10T21:15:44","modified_gmt":"2008-11-10T20:15:44","slug":"winmain-mit-argc-und-argv","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/11\/09\/winmain-mit-argc-und-argv\/","title":{"rendered":"WinMain mit argc und argv"},"content":{"rendered":"<p>Mit <em>WinMain \/ wWinMain \/ _tWinMain <\/em>bekommt man einen Zeiger auf Befehlszeile frei Haus mitgeliefert als <em>lpCmdLine<\/em>. Es ist nicht schwer Code u schreiben um diese Zeile zu interpretieren. Die MFC stellt dazu eine eigene Klasse mit dem Namen <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/zaydx040(VS.80).aspx\">CCommandLineInfo<\/a>. Manchmal w\u00e4re es aber auch einfach nur sch\u00f6n wie bei einem simplen C\/C++-Konsolenprogramm <em>argc <\/em>und <em>argv <\/em>zur Verf\u00fcgung zu haben, die an <em>main \/ wmain \/ _tmain <\/em>\u00fcbergeben werden. Leider werden die aber an die Startfunktion nicht \u00fcbergeben. (Diese Frage taucht auch nicht selten in den Communities auf).<\/p>\n<p>Versteckt in der <em>CRT <\/em>gibt es <em>argc <\/em>und <em>argv <\/em>aber immer, egal ob Konsolen- oder UI-Programm. Der Startup-Code der <em>CRT <\/em>initialisiert diese Werte immer und sie stehen als globale Variablen unter den Namen <em>__argc <\/em>und <em>__argv <\/em>bzw. <em>__argvw <\/em>zur Verf\u00fcgung. Man muss nur einen <em>#include <\/em>aud <em>stdlib.h <\/em>machen und schon stehen diese Werte zur Verf\u00fcgung.<br \/>\nIst das Programm ein Unicode Programm ist der Array <em>__argvw <\/em>initialisiert und <em>__argv <\/em>ist NULL. Ist das Programm ein MBCS Programm dann ist <em>__argv <\/em>gef\u00fcllt und <em>__argvw <\/em>ist NULL.\u00a0Entsprechend ist <em>__targv<\/em> in <em>tchar.h <\/em>definiert. (Ge\u00e4ndert nach Kommentar von Marcus Humann am 10.09.08)<\/p>\n<p>Mit <em>__argc \/ __argv \/ __argvw<\/em>\u00a0<em>\/ __targv <\/em>kann man nun ganz leicht die Befehlszeile frei verarbeiten, wie man es gewohnt ist, auch wenn man ein Windows-GUI Programm erstellt, oder die MFC benutzt.<\/p>\n<p>Das ist zwar nicht dokumentiert, aber seit VC6 bis zur aktuellen Version VC-20008 hat sich nichts ge\u00e4ndert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit WinMain \/ wWinMain \/ _tWinMain bekommt man einen Zeiger auf Befehlszeile frei Haus mitgeliefert als lpCmdLine. Es ist nicht schwer Code u schreiben um diese Zeile zu interpretieren. Die MFC stellt dazu eine eigene Klasse mit dem Namen CCommandLineInfo. Manchmal w\u00e4re es aber auch einfach nur sch\u00f6n wie bei einem simplen C\/C++-Konsolenprogramm argc und &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/11\/09\/winmain-mit-argc-und-argv\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWinMain mit argc und argv\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,19,3,9,2],"tags":[370,360,61],"class_list":["post-359","post","type-post","status-publish","format-standard","hentry","category-c","category-crt","category-programmieren","category-sonstiges","category-windows-api","tag-c","tag-crt","tag-winapi"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=359"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/359\/revisions"}],"predecessor-version":[{"id":360,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/359\/revisions\/360"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=359"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}