Ваша общая идея верна, однако ваше преобразование lpCmdLine может вызвать у вас некоторые проблемы. Учтите следующее:
$> myprogam.exe -a короткий аргумент -b -c -d "длинный аргумент с пробелами"
аргументы, передаваемые вашей главной функции, будут выглядеть примерно так:
argc = 7;
argv = {
"myprogram.exe",
"-a",
"shortargument",
"-b",
"-c",
"-d",
"long argument with spaces"
};
Однако WinMain получит большую длинную строку, подобную этой:
lpCmdLine = "-a shortargument -b -c -d "long argument with spaces"";
Так что, если у вас есть какой-либо синтаксический анализ параметров командной строки, вы, вероятно, сломаете его. Наиболее универсальный подход заключается в циклическом переборе lpCmdLine с установкой всего пробела (за исключением, конечно, соответствующих кавычек) нулевого символа (т. Е. «\ 0» или просто 0) и отслеживании указателей на первый действительный символ после последовательность нулевых символов.
Добавление: Если я правильно помню, когда я занимался разработкой, мне кажется, что я кое-что вспомнил о lpCmdLine, который просто был там для совместимости с win32, поэтому он всегда пуст. Чтобы получить командную строку, я думаю, что вы должны использовать GetCommandLine .