Здравствуйте, <Аноним>, Вы писали:
А>Ну просто афигеть.. а сами вы то проверяли?
А то ж. Ещё как проверял. И вот прямо сейчас проверил. Выводил значения argv[0] и ::GetCommandLine().
А>вот..чего оно у меня вывело.. Запускаем под виндой cmd
А>и дальше наблюдаем
А>C:\>cd C:\Projects\BuilderCpp\Temp\00\00\
А>C:\Projects\BuilderCpp\Temp\00\00>Project1
А>path = C:\Projects\BuilderCpp\Temp\00\00\Project1.exe
А>C:\Projects\BuilderCpp\Temp\00\00>ProjEct1
А>path = C:\Projects\BuilderCpp\Temp\00\00\Project1.exe
А>C:\Projects\BuilderCpp\Temp\00\00>call Project1
А>path = C:\Projects\BuilderCpp\Temp\00\00\Project1.exe
А>C:\Projects\BuilderCpp\Temp\00\00>call ..\00\.\.\pRoJeCt1.EXE
А>path = C:\Projects\BuilderCpp\Temp\00\00\Project1.exe
А>...согласитесь правда странно... Одно и тоже мне выводит.. Может вы поделетесь мне настройками для cmd под винду.., ну чтобы хоть вотдалёности иметь тот эффект о котором вы тут распространяетесь ..
А может, это у тебя cmd кривой? Я на трёх машинах проверял под 2000 и XP, и всё работало так, как работало.
А>Спасибо заранее...
Да пожалуйста!
В конце концов — неважно, какие у тебя настройки виндов.
Факт остаётся фактом: в argv[0] попадает не путь к приложению, а то, что захочет туда поместить шелл. Если конкретно твой шелл кладёт туда всегда абсолютный путь — это не значит, что на соседней машине будет то же самое.
Хм! А ведь я знаю, в чём дело!!!
В том, что
ты пользуешься Дебилдером. Борланд всегда славился закидонами, вот и сейчас они так реализовали рантайм, что вместо стандартных WinAPI-шных функций ::GetCommandLine(), ::CommandLineToArgv() собирают массив argv[] вручную — из ::GetModuleFileName(NULL) и lpCmdLine полученного в WinMain.
Кстати, нужно проверить, корректно ли они распарсивают lpCmdLine — на предмет кавычек.
... << RSDN@Home 1.2.0 alpha rev. 655>>