кАК уЗНАТЬ пУТЬ к пРОГРАММЕ
Заранее благодарен.
Необходимо узнать путь к программе(без имени ехе файла). Можно воспользоваться __argv[0] и выкинуть имя файла, но может можно проще?
Заранее благодарен.
Куда уж проще то?:D
В вопросе подразумевалось может API функция есть?
Вызов API функции требует обращения к ОС.
Вызов API функции требует обращения к ОС.
The GetCurrentDirectory function retrieves the current directory for the current process.
The GetCurrentDirectory function retrieves the current directory for the current process.
Текущий каталог процесса не всегда тот, где находится исполняемый файл программы :(
В вопросе подразумевалось может API функция есть?
А CRT не подойдет? :D
См. _splitpath
Поэтому пришлось изобрести вот это.
CString GetApllicationPath()
{
TCHAR szBuffer[_MAX_PATH];
::GetModuleFileName(AfxGetInstanceHandle(), szBuffer, _MAX_PATH);
CString sPath = (CString)szBuffer;
sPath = sPath.Left(sPath.ReverseFind('\\'));
return sPath;
}
Универсально и не сложно.
Всем спасибо, тему можно закрывать.
Значит с __argv[0] не все так отлично как кажется на первый взгляд. Под уникодом эта штука не существует, т. е. переменная то есть а в ней ничего нет(при попытке обращения программа моментально вылетает).
Т.е. как это не существует?!
int wmain( int argc, wchar_t *argv[], wchar_t *envp[] );
ты к argv[0] обращался как к wchar_t* ?
Поэтому пришлось изобрести вот это.
CString GetApllicationPath()
{
TCHAR szBuffer[_MAX_PATH];
::GetModuleFileName(AfxGetInstanceHandle(), szBuffer, _MAX_PATH);
CString sPath = (CString)szBuffer;
sPath = sPath.Left(sPath.ReverseFind('\\'));
return sPath;
}
Универсально и не сложно.
Всем спасибо, тему можно закрывать.
Я бы не сказал, что это универсально... :D
Это будет работать только с MFC и расходовать значительно больше ресурсов.
Т.е. как это не существует?!
int wmain( int argc, wchar_t *argv[], wchar_t *envp[] );
ты к argv[0] обращался как к wchar_t* ?
Я бы не сказал, что это универсально... :D
Это будет работать только с MFC и расходовать значительно больше ресурсов.
Мне именно под MFC и надо было.
А __argv[0] в MFCцешной проге типа char*. По крайней мере Visual 7.0 выдает такое при попытке обратиться к нему по другому.
Мне именно под MFC и надо было.
А __argv[0] в MFCцешной проге типа char*. По крайней мере Visual 7.0 выдает такое при попытке обратиться к нему по другому.
Да ну?
Смотрим, что выдает визард:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
.......................................
Что-то я не вижу char*
Да ну?
Смотрим, что выдает визард:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
.......................................
Что-то я не вижу char*
Где? Я ж говорил нужна фишка была под МФС. Создаем к примеру МДИ и где смотреть выдачу визарда ?
Где? Я ж говорил нужна фишка была под МФС. Создаем к примеру МДИ и где смотреть выдачу визарда ?
Если проблема только в UNICODE vs ASCII, я как-то встречал в winAPI функции для преобразования из однобайтовых строк в двухбайтовые и назад. Возможно, это есть только в win2k. Не помню, как они называются, но могу посмотреть, если нужно.
Где? Я ж говорил нужна фишка была под МФС. Создаем к примеру МДИ и где смотреть выдачу визарда ?
Тогда это уже не консольное приложения, там WinMain, а не main. А у WinMain нет аргумена argv[0] как такового, там lpCmdLine.
Тогда это уже не консольное приложения, там WinMain, а не main. А у WinMain нет аргумена argv[0] как такового, там lpCmdLine.
В winAPI есть функция, которая делает из lpCmdLine __argv. Сам, правда, не пользовался..
В winAPI есть функция, которая делает из lpCmdLine __argv. Сам, правда, не пользовался..
Указатель на полную командную строку процесса можно.получить и вызовом функции GetCommandLine.
Она возвращает указатель на буфер, содержащий полную командную строку, включая полное имя (вместе с путем) исполняемого файла.
Необходимо узнать путь к программе(без имени ехе файла). Можно воспользоваться __argv[0] и выкинуть имя файла, но может можно проще?
Заранее благодарен.
Очень просто. Есть функция GetModuleFileName(). Если первый параметр NULL, то в буфер записывается полный путь текущего исполняемого модуля