Anwendung mit Parameter starten
-
Hallo!
Ich möchte einen Programmteil (ein Dialogfeld - MFC EXE Datei) in Visual C++ schreiben der von einem anderen Programm (nicht in c++ geschrieben) aufgerufen wird. Das große Problem das ich dabei habe ist das ich dem neuen Programmteil (in C++) Parameter übergeben möchte. Ich hätte es jetzt erstmal unter dos probiert (und im main 2 parameter eingetragen) ich wollte dem programm die paramter übergeben indem ich es unter dos mit dem programmnamen und dahinter den parmetern aufrufen wollte, doch das ging schon nicht in einer MFC Anwendung weiß ich jetzt überhaupt nicht wo ich mit den Parametern hin soll.
Ein Freund hat gemeint das es möglicherweise leichter geht einer dll datei parameter zu übergeben nur habe ich noch nie eine dll Datei erstellt.
Könnte ich überhaupt eine dll Datei so erstellen das sich bei aufruf ein Dialogfeld Öffnet?Ich weiß überhaupt nicht mehr weiter!!
Könnt Ihr mir vielleicht helfen? Ich bin für jede Hilfe Dankbar!!!Vielen Dank
Ronny
-
erstell eine verknüpfung deiner exe und schreib die parameter hinter den pfad bei "ziel:"
etwa so C:\WINDOWS\system32\UnInstall32.exe -uninstallin standard c++ programmen werden die parameter der main funktion übergeben
in mfc verwendet man CCommandLineInfo (->msdn)
-
Servus,
also du möchtest gerne ein Programm mit Parametern starten. Dazu musst du dir einen kleinen CommandLineParser bauen. Das ist im Prinzip ganz einfach. Ich beschreibe dir das nun in einzelnen Schritten:
Erstelle eine neue Klasse vom Typ CCommandLineInfo. Dann erstellt er eine .h und eine .cpp Datei.
Deine .h sollte später ungefähr so aussehen:
#pragma once class CDeineCommandLine : public CCommandLineInfo { public: BOOL m_bPaulstinkt; CDeineCommandLine(); //- Dein Konstruktor virtual ~CDeineCommandLine(); //- Dein Destruktor virtual void ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast); //Deine Parsermethode sollte ungefähr so aussehen };
Deine .cpp sollte ungefähr so aussehen:
#include "stdafx.h" #include "DeineCommandLine.h" CDeineCommandLine::CDeineCommandLine() { m_bPaulstinkt = FALSE; //Hier im Konstruktor auf einen Anfangswert setzen (muss nicht sein) } CDeineCommandLine::~CDeineCommandLine() { } void CDeineCommandLine::ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) { if (bFlag) { if (!stricmp("a",pszParam)) //Wenn "/a" eingegeben wird dann ist bPaulstinkt = TRUE m_bPaulstinkt = TRUE; } CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); }
Jetzt musst du nur noch in deiner **App.cpp einen Eintrag unter InitInstance machen und in die **App.h die .h von deiner neuen Klasse includieren.
**App.cpp
BOOL CDeineApp::InitInstance() { .. CDeineCommandLine cmdInfo; ParseCommandLine(cmdInfo); .. }
**App.h
#include "DeineCommandLine.h"
und schon hast du einen kleinen Kommandozeilenparser gebaut. Den kannst du natürlich beliebig erweitern. Einfach Einträge in die DeineCommandLine.cpp hinzufügen:
z.B.
void CDeineCommandLine::ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) { if (bFlag) { if (!stricmp("a",pszParam)) //Wenn "/a" eingegeben wird dann ist bPaulstinkt = TRUE m_bPaulstinkt = TRUE; if (!stricmp("b",pszParam)) //Wenn "/a" eingegeben wird dann ist bPaulstinkt = TRUE m_bTest = TRUE; } CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); }
Sollte eigentlich funzen
Viel Spaß
*winke*
HellsgoreEDIT:
Sollte jemand den Namen Paul haben, möge er es mir nicht übel nehmen wenn ich seinen Namen zu boolschen Zwecke benutzt habe.... *g*
-
Hallo!
Vielen Dank!!!
Das hat mich ein RIESEN Schritt weiter gebracht!
Es dürfte zwar alles funktionieren nur kann ich beim aufrufen die parameter noch nicht wirklich mitgeben.....
Vielleicht gebe ich nur die parameter beim pfad falsch an....C:..........\...exe a
bzw. ... /a habe schon mehreres ausprobiert komm aber nicht hin...
Wie heißt den der Pfad richtig?
Danke Ronny
-
Servus,
Ähm verstehe jetzt im Augenblick nicht so ganz was du für ein Problem hast.
Du startest jetzt z.B. dein Programm mit:
C:\Programm.exe /a
dann sollte er eigentlich den Parameter erkennen und in die Funktion ParseParam springen. Das funktioniert auch alles habe es gerade ausprobiert. Du hast bestimmt in deiner App.cpp vergessen unter InitInstance
CDeineCommandLine cmdInfo; ParseCommandLine(cmdInfo);
das einzutragen. Dann sollte es wirklich funktionieren.
Ansonsten musst du bitte noch mal explizit erklären was du machen möchtest...
*winke*
Hellsgore
-
Hallo!
Danke für deine Antwort!
Sorry ich stelle mich wahrscheinlich ziemlich dämlich an!Aber wenn ich als Parameter einen Text mitgeben möchte und den dann einmal nur per MessageBox ausgeben möchte was muss ich dann machen?
Ich verstehe ehrlich gesagt die Parser Funktion nicht wirklich und habe keine Ahnung wie ich es umändern kann.Könntest du mir vielleicht noch einmal helfen?
Danke Ronny
-
Servus,
void CDeineCommandLine::ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) { if (bFlag) { AfxMessageBox(pszParam); //in pszParam steht das drin was hinter einen "/" kommt } CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); }
kannst ja mal einfach durchdebuggen..... dann siehst du das alles...
Viel Spaß
*winke*
Hellsgore