Hi.
My very first post here at CodeGuru, so bear with me, if it doesn't comply with all the standards
I'm trying to add a command line interface to an existing MFC application. As of now I can open the application and load a file into the app. using the command line.
I would like the keep that functionality, and add three optional arguments to the command line interface. I've followed the example given by Kirants here: http://www.codeguru.com/forum/showthread.php?t=386406. The "ParseParam" function implemented in the exampel overrides the original ParseParam function, and therefore I'm unable to use the original ParseParam to open the file.
Code example given below:
CommandLineParser.h:
InitInstance:Code:class CommandLineParser : public CCommandLineInfo { bool clp_reset; bool clp_verify; bool clp_load; public: CommandLineParser(); virtual ~CommandLineParser(); bool IsLoad(); bool IsVerify(); bool IsReset(); virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast); }; CommandLineParser::CommandLineParser() { clp_load = clp_verify = clp_reset = false; } CommandLineParser::~CommandLineParser() { } bool CommandLineParser::IsLoad() { return clp_load; } bool CommandLineParser::IsVerify() { return clp_verify; } bool CommandLineParser::IsReset() { return clp_reset; } void CommandLineParser::ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast) { //Arguments could be either -l or --l if(0 == strcmp(pszParam, "l") || 0 == strcmp(pszParam, "-l")) { clp_load = true; } else if(0 == strcmp(pszParam, "v")) { clp_verify = true; } else if(0 == strcmp(pszParam, "r")) { clp_reset = true; } }
So, to sum it up, I think my issue is that CCommandLineInfo clears the commandline, leaving nothing to be parsed by my CommandLineParser.Code:BOOL CMyMlvApp::InitInstance() { LPTSTR TempPath; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; ... TempPath=GetCommandLine(); if (TempPath[0]=='\"') TempPath++; TempPath[strcspn(TempPath," ")]='\0'; _splitpath( TempPath, drive, dir, fname, ext ); strcpy(MainPathName,drive); strcat(MainPathName,dir); SetCurrentDirectory(MainPathName); ... // Enable DDE Execute open EnableShellOpen(); RegisterShellFileTypes(TRUE); // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo1; ParseCommandLine(cmdInfo1); // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo1)) return FALSE; CommandLineParser cmdInfo2; ParseCommandLine(cmdInfo2); if(cmdInfo2.IsLoad()) { cout << "IsLoad"; } else if(cmdInfo2.IsVerify()) { cout << "IsVerify"; } cout << "Was it loaded or verified?";
How do I work around this?
btw - I'm on Win XP, and using VC++ 6
Best regards
Kasper D.



Reply With Quote

Bookmarks