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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
#1

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

08.02.2014, 15:46. Просмотров 407. Ответов 3
Метки нет (Все метки)

Такое дело:
Цитата Сообщение от 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(); должна возвращать обработанную строку с произведённой заменой одинарного слеша на двойной, так ли это?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция возвращающая char* путь к файлу (C++):

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел - C++
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...

Функция возвращающая константу - C++
Почему добавление спецификатора const ничего не меняет? const int f(int a) { return a; } int main(int argc, char *argv)...

Функция, возвращающая массив - C++
Задача: В двумерном целочисленом массиве заданного размера найти номера строк, элементы которых образуют убявающую последовательность. ...

Функция, возвращающая указатель - C++
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е. функцию, которая принимает аргумент типа...

Функция, возвращающая указатель - C++
Здравствуйте. Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив,...

Функция, возвращающая массив - C++
Нужно вернуть из функции массив. int F(int a,int* b) { for(int i=0;i<a;i++) *b++; for(int i=0;i<3;i++) printf("%d\n", b); ...

3
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.02.2014, 16:19 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
strncpy( buffer, str.c_str(), MAX_PATH );
buffer[MAX_PATH-1] = '\0';
return buffer;
P.S. только буфер надо сделать не локальным. А выделить его динамически.
1
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
09.02.2014, 02:12  [ТС] #3
Супер! Оно самое. Спасибо большое!
0
Убежденный
Ушел с форума
Эксперт С++
15689 / 7199 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
09.02.2014, 11:37 #4
Цитата Сообщение от SkyLu Посмотреть сообщение
Проблема в том что функция bool LoadWaveFile(char* filename, IDirectSoundBuffer8** secondaryBuffer); принимает только char* который функцией retunABC(); я бы хотел вернуть, но увы... ни как
Возвращайте из своей функции std::string.
А в LoadWaveFile ее тогда можно будет передать так:
C++
1
2
string Filename = returnABC();
LoadWaveFile(Filename.c_str(), ...);
Заодно не нужно будет думать про выделение и освобождение памяти.
0
09.02.2014, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 11:37
Привет! Вот еще темы с ответами:

Функция, возвращающая значение - C++
сам не могу осилить

Функция возвращающая ссылку - C++
Так делать не правильно, но попытался написать код: int& func(int &x) { return &x; } В чем ошибка?

Функция, возвращающая ссылку - C++
Помогите исправить функцию, которая возвращает ссылку на массив size_t Crd() { size_t crd; return &crd; }

Функция возвращающая массив - C++
Здравствуйте. Для возврата массива возвращаю указатель на него, но вне предела области в которой он был создан память выделенная под массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru