Re[2]: Чем GetModuleFileName(), лучше чем argv[0]?
От: Кодт Россия  
Дата: 16.08.06 11:58
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Ну просто афигеть.. а сами вы то проверяли?


А то ж. Ещё как проверял. И вот прямо сейчас проверил. Выводил значения 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>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.