• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Включение звуков в исполняемый файл

  • Автор темы Never
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Never

Здравствуйте!
Я сделала маленький текстовый редактор, который использует три звуковых wav-файла. Есть ли способ включить эти звуки в исполняемый exe-файл, чтобы в конечном итоге передать программу на другой компьютер в виде одного exe-файла?
----
С уважением.
 
M

morpheus

Можно, это называеться работа с ресурсами
 
N

Never

А Вы не могли бы поподробнее рассказать, как это сделать? :)
 
M

morpheus



 
N

Never

Простите, пожалуйста, но у меня не получается :(
В текстовом файле "resource.rc" я написала строчку:

-------------------------------------------
MY_SOUNDS CATSOUNDS "cat2.wav"
-------------------------------------------

Затем подключила файл "resource.rc" к программе (Shift + F11).

Потом вставила в начало *.cpp-файла этот код:

-----------------------------------------------------------------------------------------------------------
TResourceStream *res_stream = new TResourceStream(0, "MY_SOUNDS", "CATSOUNDS");
res_stream->SaveToFile("cat2.bin");
delete res_stream;
-----------------------------------------------------------------------------------------------------------

Но программа при компилировании выдает ошибку.
Помогите, пожалуйста, что я сделала не так?
 
E

European

<!--QuoteBegin-Never+29:01:2007, 17:32 -->
<span class="vbquote">(Never @ 29:01:2007, 17:32 )</span><!--QuoteEBegin-->Потом вставила в начало *.cpp-файла этот код:
[snapback]54399" rel="nofollow" target="_blank[/snapback]​
[/quote]
Что-то меня эта строчка смутила :( Может в обработчик кнопки поместить, например? Обьясните подробнее и, желательно, укажите текст ошибки.
 
N

Never

Вот и меня тоже смущает, что этот код просто "висит" в программе, не привязанный ни к какому обработчику. Может, его вообще нужно в заголовочный *.h-файл поместить? :)

Просто по второй ссылке, которую дал уважаемый Morpheus, написано "А где-то в программе:..." должен быть этот код. А я новичек, только учусь, и мне бы хотелось конкретно узнать, куда именно нужно это вставить.
В обработчик кнопки не хотелось бы. Но если TResourceStream - это компонент, то должен же быть, наверное, и обработчик этого компонента? Но я не могу найти, где он находится в закладках?

А ошибки выдает следующие:
- Declaration Syntax Error
- Declaration Terminated Incorrectly
 
N

Never

Ура!!! Таки получилось! :)
Но немного по другой формуле:
=====================
//in rc
/*NAME TYPE FILE*/
app RCDATA your.exe
//in cpp
TResourceStream *rs = new
TResourceStream((int)HInstance,AnsiString("app"),RT_RCDATA);
rs->SaveToFile("your.exe");
delete rs ;
=====================

Так как мне нужно было подключить звуковые файлы, то я вставила код в те обработчики, в которых эти звуки должны были проигрываться.

Только у меня теперь после запуска экзешника на другом компе, эти три звуковых файла снова из него "вываливаются", т.е. опять вместе с экзешником лежат в папочке три wav-файла. Так и должно быть? Просто я думала, что всё так и будет храниться в одном ехе-файле.
 
Z

zubr

А куда ж они денутся, если вы их не удалите после окончания работы программы или после их проигрывания. Если не хотите, чтобы юзер их видел во время работы программы, сохраняйте их не в каталог программмы, а в другое место, к примеру в папку Temp. Есть еще вариант, выгружать файлы из ресурса в память программы, не сохраняя их на диске, но это для начинающего программиста, имхо, трудно.
 
W

WinMain

Есть функция sndPlaySound, которая может проигрывать звук как из файла на диске, так и прямо в оперативной памяти. Т.е. из ресурсов не нужно вывыливать файлы на диск, а можно грузить их сразу в оперативную память и прямо там проигрывать.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!