Форум программистов, компьютерный форум CyberForum.ru

Функция возвращающая char* путь к файлу - C++

Восстановить пароль Регистрация
 
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
08.02.2014, 15:46     Функция возвращающая char* путь к файлу #1
Такое дело:
Цитата Сообщение от SkyLu Посмотреть сообщение
есть приложение, есть DLL, написанная мною, которая проигрывает определённый звук по "команде" из приложения.
В моей DLL есть функция которая читает WAV файл.
Вот она:

LoadWaveFile("\\sound01.wav", &m_secondaryBuffer0);

WAV файл находиться в C:\
Вопрос: как или что написать что бы функция открывала файл находящийся в папке с приложением, при этом не указывая точного пути к файлу(так как у разных пользователей это приложение может быть установлено в разных директориях)?
Мне любезно предоставили следующий ответ:
Цитата Сообщение от Убежденный Посмотреть сообщение
GetModuleFileName - получаете полный путь к запущенному exe.
Дальше отрезаете от этого пути все, что идет за последним слэшем.
C++
1
2
3
4
5
6
7
8
9
using namespace std;
 
wstring Path = SomePath;
wstring::size_type const iLastSlash = Path.find_last_of(L"\\/");
 
if (wstring::npos != iLastSlash)
{
    Path = Path.substr(iLastSlash);
}
После перевода в мультик, код выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char* retunABC()
{
    char buffer[MAX_PATH];
    string str;
 
    GetModuleFileName(NULL, buffer, MAX_PATH); // Узнаю путь к дериктории экзешника
 
    str = buffer; // Путь в стринг для последующей обработки
 
    string::size_type const lastSlash = str.find_last_of("\\/");
 
    if(string::npos != lastSlash)
    {
        str = str.substr(0,lastSlash); // Отнимаю псоледний слэшь с именем экзешника
    }
 
    const char *cstr = str.c_str(); // Явная хрень, но пытаюсь из стринга вернуть в char*
 
    return *cstr;
}
Проблема в том что функция bool LoadWaveFile(char* filename, IDirectSoundBuffer8** secondaryBuffer); принимает только char* который функцией retunABC(); я бы хотел вернуть, но увы... ни как ( хотелось бы что бы было что-то в роде LoadWaveFile(retunABC(), &m_secondaryBuffer0);
Как вернуть путь к файлу функцией через char* ?

И ещё такой момент, если раньше просто вбивал путь к файлу, использую двойной слешь, то, по идее, retunABC(); должна возвращать обработанную строку с произведённой заменой одинарного слеша на двойной, так ли это?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.02.2014, 16:19     Функция возвращающая char* путь к файлу #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
strncpy( buffer, str.c_str(), MAX_PATH );
buffer[MAX_PATH-1] = '\0';
return buffer;
P.S. только буфер надо сделать не локальным. А выделить его динамически.
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
09.02.2014, 02:12  [ТС]     Функция возвращающая char* путь к файлу #3
Супер! Оно самое. Спасибо большое!
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,333
Завершенные тесты: 1
09.02.2014, 11:37     Функция возвращающая char* путь к файлу #4
Цитата Сообщение от SkyLu Посмотреть сообщение
Проблема в том что функция bool LoadWaveFile(char* filename, IDirectSoundBuffer8** secondaryBuffer); принимает только char* который функцией retunABC(); я бы хотел вернуть, но увы... ни как
Возвращайте из своей функции std::string.
А в LoadWaveFile ее тогда можно будет передать так:
C++
1
2
string Filename = returnABC();
LoadWaveFile(Filename.c_str(), ...);
Заодно не нужно будет думать про выделение и освобождение памяти.
Yandex
Объявления
09.02.2014, 11:37     Функция возвращающая char* путь к файлу
Ответ Создать тему
Опции темы

Текущее время: 19:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru