|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 18, 2003 13:59:34 Запихиваю в ресурсы xm-файл, потом пытаюсь его найти функцией FindResource, но она почему-то возвращает в eax=0, чего то я не догоняю в чём проблема? В ресурсах файл лежит. ----------------------------------------------------------------- start: invoke GetModuleHandle,NULL mov hModule,eax invoke FindResource,hModule,addr SoundResource,RT_RCDATA mov hResource1,eax invoke LoadResource,hModule,hResource1 mov hResource2,eax invoke LockResource,hResource2 mov hResource3,eax invoke SizeofResource,hModule,hResource1 mov hResource4,eax invoke FMUSIC_LoadSongMemory,hResource3,hResource4 mov handle,eax invoke FMUSIC_PlaySong,handle invoke FMUSIC_StopSong,handle invoke FMUSIC_FreeSong,handle ----------------------------------------------------------------- |
|
|
Дата: Июн 18, 2003 16:07:01 Asterix А что такое xm файлы? |
|
|
Дата: Июн 18, 2003 16:41:56 You have a music file or a sound you want to play. What FMOD API should you use to load and play it? If it is a sequenced music file such as .MOD, .S3M, .XM, .IT or .MID, then use the FMUSIC API. :-)))))))))))))))) |
|
|
Дата: Июн 18, 2003 18:54:55 Asterix Возможно ты неверно определяешь его? А что говорит Дизассемблер: Он попадает в раздел ресурсов? |
|
|
Дата: Июн 18, 2003 19:33:30 А как он должен собственно туда попадать? Разве это прямо так заметишь? Имя ресурса грузится на стек всё нормально, да и вообще этот код не я придумал, я его выдрал из C-шного исходника. Код вроде рабочий. Вот работающий пример, но файл грузится с диска, а хотелось бы из ресурсов: ----------------------------------------------------------- .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\fmod.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\fmod.lib .data MsgCaption db "message",0 MsgBoxText db "The project is loaded successfully!",0 SoundResource db "sound.xm",0 .data? handle dd ? .code start: invoke FSOUND_Init,7D00h,40h,1h invoke FMUSIC_LoadSong,addr SoundResource mov handle,eax invoke FMUSIC_PlaySong,handle invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK invoke ExitProcess,NULL end start ----------------------------------------------------------- |
|
|
Дата: Июн 18, 2003 21:48:15 "addr SoundResource" - этот параметер может быть передан двойственно: 1. обычный UINT 2. как адрес реальной строки === Зависит это от того каким образом этот RCDATA объявлен в RC файле. Самое нехорошее - это то, что, если имя ресурса без двойных кавычек и нет ID, то имя автоматически становится текстом: IDC_MYSOUND1 RCDATA ... если 'IDC_MYSOUND1' нигде не объявлен, то в FindResource()() надо передавать адрес "IDC_MYSOUND1", а если объявлен как: #define IDC_MYSOUND1 1024 тогда надо передать это целое значение (1024), а не адрес. ...ммда... что-то я заболтался... |
|
|
Дата: Июн 18, 2003 21:56:14 Вот те рабочий пример: ; *.asm .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib IDR_TXT equ 1000 .data szResourseName db "txt", 0 .code start proc local hResInfo:HRSRC local cb:UINT local pRes:LPVOID invoke FindResource, NULL, IDR_TXT, addr szResourseName .if eax != NULL mov hResInfo, eax invoke LoadResource, NULL, hResInfo .if eax != NULL mov pRes, eax invoke SizeofResource, NULL, hResInfo mov cb, eax invoke LockResource, hResInfo invoke MessageBox, NULL, pRes, NULL, MB_OK .endif .endif invoke ExitProcess, 0 start endp end start ; rsrc.rc #include <\masm32\include\resource.h> #define IDR_TXT 1000 IDR_TXT txt DISCARDABLE "text.txt" ; text.txt Тут сам ченить напишешь ;-) |
|
|
Дата: Июн 19, 2003 07:11:03 Всем спасибо, теперь код рабочий :-), но, как можно заметить, прога использует fmod.dll, которая не маленьких размеров. Как можно от неё избавится, если я правильно понимаю, то статическая линковка должна взять только нужные мне API, а всё остальное в код не попадёт или я заблуждаюсь? ---------------------------------------------------------------------- - .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\fmod.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\fmod.lib IDB_SOUND equ 1 .data MsgCaption db "message",0 MsgBoxText db "The project is loaded successfully!",0 .data? hResource1 dd ? hResource2 dd ? hResource3 dd ? hResource4 dd ? handle dd ? .code start: invoke FSOUND_Init,7D00h,40h,1h invoke FindResource,NULL,IDB_SOUND,RT_RCDATA .if eax != NULL mov hResource1,eax invoke LoadResource,NULL,hResource1 .if eax != NULL mov hResource2,eax invoke LockResource,hResource2 mov hResource3,eax invoke SizeofResource,NULL,hResource1 mov hResource4,eax invoke FMUSIC_LoadSongMemory,hResource3,hResource4 mov handle,eax invoke FMUSIC_PlaySong,handle .endif .endif invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK invoke ExitProcess,NULL end start ;--------------------------------------------------------------------- ; Файл ресурсов ;--------------------------------------------------------------------- #define IDB_SOUND 1 IDB_SOUND RCDATA "sound.s3m" |
|
|
Дата: Июн 19, 2003 08:40:38 использует fmod.dll ... если я правильно понимаю, то статическая линковка должна взять только нужные мне API Из dll'ки ничего в Ваш код не попадает. Она (dll'ки) должна присутствовать при старте программы, как kernel32.dll и т.п. В код попадает из "настоящей" библиотеки. Например, masm32.lib. |
|
|
Дата: Июн 20, 2003 15:49:19 · Поправил: Asterix [ P2M: Из dll'ки ничего в Ваш код не попадает. Она (dll'ки) должна присутствовать при старте программы, как kernel32.dll и т.п. В код попадает из "настоящей" библиотеки. Например, masm32.lib.] Это понятно, но нельзя ли из этой DLL сконвертить как-нить нормальную статическую lib'у? Или это только нужно вручную код в IDA рипать? |
|
|
Дата: Июн 20, 2003 16:24:21 Есть такая софтина "DLL to Lib" http://www.binary-soft.com/ Как то один раз я с ней экспериментировал и вроде что-то даже получилось. Попробуй. |
|
|
Дата: Июн 20, 2003 16:32:05 Спасибо, Four-F, попробую :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070 |