Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

argc und argv bei Windowsprogrammen

Empfohlene Antworten

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

Original erstellt von Magoo:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

}

Sorry...

Bine

<FONT COLOR="#a62a2a" SIZE="1">[ 05. November 2001 12:33: Beitrag 1 mal editiert, zuletzt von Woodstock ]</font>

Hä? Das verstehe ich jetzt nicht ganz! Bitte versuch es nochmal einfacher und genauer zu erklären!

Magoo

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

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>

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

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>

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.