Click here to Skip to main content
11,717,541 members (79,729 online)

C / C++ / MFC

 
AnswerRe: Calling main from within Windows application Pin
Richard MacCutchan5-Aug-12 6:51
mvpRichard MacCutchan5-Aug-12 6:51 
AnswerRe: Calling main from within Windows application Pin
jschell5-Aug-12 7:53
memberjschell5-Aug-12 7:53 
AnswerRe: Calling main from within Windows application Pin
pasztorpisti5-Aug-12 15:08
memberpasztorpisti5-Aug-12 15:08 
AnswerRe: Calling main from within Windows application Pin
TopCoder235-Aug-12 18:37
memberTopCoder235-Aug-12 18:37 
Try this.



#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
typedef TCHAR tchar;
typedef std::basic_string<tchar> tstring;
typedef std::basic_stringstream<tchar> tstringstream;
typedef std::vector<tstring> arg_vector;
 
bool filter(char c)
{
    return (c == '\"');
}
 
arg_vector cmdline_to_argv(tstring const & cmdline)
{
    arg_vector args;
 
    if (cmdline.empty())
        return args;
 
    bool together = false;
    bool only_spaces = true;
    tstring::size_type laststart = 0;
 
    for (tstring::size_type n = 0; n < cmdline.length(); ++n)
    {
        if (cmdline[n] == '\"')
        {
            together = !together;
        }
 
        bool space = !!isspace(cmdline[n]);
 
        if (space && !together)
        {
            if (!only_spaces)
            {
                tstring arg = cmdline.substr(laststart, n - laststart + 1);
                arg.resize(std::remove_if(arg.begin(), arg.end(), &filter) - arg.begin());
                args.push_back(arg);
            }
            laststart = n + 1;
        }
 
        if (space)
            only_spaces = true;
        else
            only_spaces = false;
    }
 
    if (!only_spaces)
    {
        tstring arg = cmdline.substr(laststart, cmdline.length() - laststart + 1);
        arg.resize(std::remove_if(arg.begin(), arg.end(), &filter) - arg.begin());
        args.push_back(arg);
    }
 
    return args;
}
 

int main(arg_vector const & args)
{
    tstringstream strm;
    strm << args.size() << " arguments!\n";
    for (arg_vector::size_type n = 0; n < args.size(); ++n)
        strm << "Argument #" << (n + 1) << ": " << args[n] << "\n";
    MessageBox(NULL, strm.str().c_str(), TEXT("Command Line Test"), MB_OK | MB_ICONINFORMATION);
    return 0;
}
 
int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance, LPSTR cmdline, int show)
{
    return main(cmdline_to_argv(GetCommandLine()));
}

QuestionBEX runtime error! Pin
Le@rner2-Aug-12 18:54
memberLe@rner2-Aug-12 18:54 
AnswerRe: BEX runtime error! Pin
Peter_in_27802-Aug-12 19:04
memberPeter_in_27802-Aug-12 19:04 
AnswerRe: BEX runtime error! Pin
Richard MacCutchan2-Aug-12 21:21
mvpRichard MacCutchan2-Aug-12 21:21 
AnswerRe: BEX runtime error! Pin
enhzflep2-Aug-12 23:41
memberenhzflep2-Aug-12 23:41 
AnswerRe: BEX runtime error! Pin
TopCoder233-Aug-12 0:34
memberTopCoder233-Aug-12 0:34 
AnswerRe: BEX runtime error! Pin
Wes Aday3-Aug-12 6:54
memberWes Aday3-Aug-12 6:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


Advertise | Privacy | Mobile
Web03 | 2.8.150901.1 | Last Updated 3 Sep 2015
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid