Magoo Geschrieben 5. November 2001 Geschrieben 5. November 2001 Hi Leute! Habe ein kleines Problem. Ich benutze den C++ Builder von Borland, um damit schicke Windows-Anwendungen zu programmieren. Das funktioniert bisher auch ganz gut. Nur jetzt möchte ich ein Windows-Programm schreiben, das auch Parameter verarbeiten kann. Bei Konsolenanwendungen kein Problem. Aber jetzt kommts: So sieht die vom Borland C++ Builder erstellte Main aus: WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } Wie kann ich jetzt Parameterwerte übernehmen und benutzen, damit mein Programm verschiedene Sachen kann? Ich stehe wie ein Ochs vorm Berg !!! Danke schonmal für Antworten! CU Magoo Zitieren
mst Geschrieben 5. November 2001 Geschrieben 5. November 2001 Original erstellt von Magoo: WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { } Zitieren
Woodstock Geschrieben 5. November 2001 Geschrieben 5. November 2001 Sorry... Bine <FONT COLOR="#a62a2a" SIZE="1">[ 05. November 2001 12:33: Beitrag 1 mal editiert, zuletzt von Woodstock ]</font> Zitieren
Magoo Geschrieben 5. November 2001 Autor Geschrieben 5. November 2001 Hä? Das verstehe ich jetzt nicht ganz! Bitte versuch es nochmal einfacher und genauer zu erklären! Magoo Zitieren
Hasi Geschrieben 5. November 2001 Geschrieben 5. November 2001 WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpszArgs, int nArgs) { } also ich versuch mal ob ich es dir erklaeren kann ich ruf mein Programm auf C:\Rabit.exe 1 15 92 Magoo dann steht in lpszArgs "1 15 92 Magoo" drin und nArgs hat den Wert 13 Zitieren
Crush Geschrieben 5. November 2001 Geschrieben 5. November 2001 WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) MST: Das 3. Argument sind die Parameter als eine Zeichenkette. Crush-> Oder anders gesagt halt als String MST: Das 4. Argument ist die Länge (inkl. schließender Null) der Zeichenkette Crush-> Ist falsch, ein String selber terminiert sich durch die 0, also braucht man die Länge nicht zu kennen. Das sind die Anzahl der Argumente +1 (wegen dem Aufruf des Programms selbst, welches schon als Parameter zählt) nArgs soll normal "number of Arguments" als Anzahl der Argumente heißen. also zum Besseren Verständnis WINAPI WinMain(HINSTANCE, HINSTANCE,"Parameter1 Parameter2 Parameter3",4) Ist vielleicht ein blödes Beispiel, aber dadurch wird klar, daß Das Programm selbst (Parameter1) und die 3 zusätzlichen Parameter als Zeichenkette/String die Anzahl der Parameter ergibt = 4 Du brauchst also nur 4-1=3x die Parameter bis zum nächsten Leerzeichen 0x20 oder Stringende 0x00 auseinanderschnippeln und kannst diese verarbeiten. Jedenfalls, wenn das so bei Borland ist, denn die WinAPI WinMain() von Microsoft sieht ein wenig anders aus: MSDN: int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window ); nCmdShow Specifies how the window is to be shown. This parameter can be one of the following values: Value Meaning SW_HIDE Hides the window and activates another window. SW_MINIMIZE Minimizes the specified window and activates the top-level window in the system's list. SW_RESTORE Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position (same as SW_SHOWNORMAL). SW_SHOW Activates a window and displays it in its current size and position. SW_SHOWMAXIMIZED Activates a window and displays it as a maximized window. SW_SHOWMINIMIZED Activates a window and displays it as an icon. SW_SHOWMINNOACTIVE Displays a window as an icon. The active window remains active. SW_SHOWNA Displays a window in its current state. The active window remains active. SW_SHOWNOACTIVATE Displays a window in its most recent size and position. The active window remains active. SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position (same as SW_RESTORE). Also schau nochmal zur Sicherheit genau nach, ob Borland´s WinMain nicht vielleicht auch auf diese Weise funktioniert. <FONT COLOR="#a62a2a" SIZE="1">[ 05. November 2001 13:19: Beitrag 8 mal editiert, zuletzt von Crush ]</font> Zitieren
Magoo Geschrieben 5. November 2001 Autor Geschrieben 5. November 2001 Okay. So weit, so gut... Aber: Die oben abgebildete WinMain habe ich angepasst, und sieht jetzt so aus: #include <vcl.h> #pragma hdrstop USERES("Auswertung.res"); USEFORM("Main.cpp", Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpszArgs, int nArgs) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } Jedoch werde ich nicht mehr in die Main coden. Der Rest befindet sich in der einer anderen Datei (in der Main.cpp). Dort hab ich jetzt ne Funktion, in der ich die Parameter brauche. Wie komme ich da jetzt ran? Ich hoffe, ihr habt das Problem verstanden. Magoo Zitieren
Crush Geschrieben 5. November 2001 Geschrieben 5. November 2001 Also wichtig ist vorher erstmal: #ifndef blockname oder auch if !define(Blockname) #define Blockname .... (ganzer Source folgen lassen) #endif (sollte eh immer überall im Header stehen, damit nicht irgendwann alles doppeltgemoppelt reinincluded wird - gibt nur lauter errors im besten Fall) Vielleicht solltest Du noch einen Namespace für das ganze Definieren, daß Du alle Variablen der CPP über Namespace::Funktion (Scope) ansprechen kannst. Und wenn das ganze im Header von Main drin hast sollte auch schon das Meiste bekannt sein. Im Zweifelsfall kannst Du den String mit den Paramern ja auch über eine Funktion als Returnwert zurückgeben. Es ist ratsam den Argumentenstring nochmal extra in einen eigenen Pointer oder String im obigen Source irgendwo abzulegen, damit der Wert nicht nach dem Verlassen des Namespace verloren geht. <FONT COLOR="#a62a2a" SIZE="1">[ 05. November 2001 21:14: Beitrag 3 mal editiert, zuletzt von Crush ]</font> Zitieren
Magoo Geschrieben 7. November 2001 Autor Geschrieben 7. November 2001 Hmm. Das hab ich auch nicht verstanden. Sorry! Bitte erklärt es mir auf etwas leichtere Art. Am Besten mit einem Beispiel. Ich habe also eine Datei, in der die WinMain (programm.cpp) steht. Diese sieht wie folgt aus: #include <vcl.h> #pragma hdrstop USERES("Auswertung.res"); USEFORM("Main.cpp", Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpszArgs, int nArgs) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } Dann habe ich noch eine weitere Datei. In dieser Habe ich dann auch noch Funktionen, wo ich in einer der Funktionen die Parameter verwenden möchte. Diese Funktion sieht bis jetzt so aus: void __fastcall TForm1::FormActivate(TObject *Sender) { int i = 0; // Ein wenig Rechnerei // ... usw. } Was muss ich jetzt machen, damit ich die Werte der Parameter in der Funktion "FormActivate" verwenden kann? Wie gesagt. Antworten mit Beispielen würden mir am meisten helfen! Danke schonmal CU Magoo Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.