我想用win32汇编语言编一个mp3程序,哪位高手能教教我??

szgqs8 2007-05-30 05:34:30
我想用win32汇编语言编一个mp3播放器,要求不高,只要能播放,能停止就行了.
但是我的思路不清楚,哪位高手能教教我啊?小弟感激不尽!
...全文
411 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaors 2007-06-06
  • 打赏
  • 举报
回复
回复:szgqs8


============================
如果用ml不能编译,楼主可以用masm编译
szgqs8 2007-06-01
  • 打赏
  • 举报
回复
1楼给的代码编译的时候会出现这样的错误
error A4910:cannot open file :d:\masm32\bin\ML.err
mp3.asm(44):fatal error A1000:mci.mac

不知道这样的错误怎么该?

zfxin 2007-05-30
  • 打赏
  • 举报
回复
要x86汇编写的.
紫郢剑侠 2007-05-30
  • 打赏
  • 举报
回复
aogo写的CoolPlayer也不错,好像是开源的
fbmsf 2007-05-30
  • 打赏
  • 举报
回复
在asm.yeah.net上面也有。
fbmsf 2007-05-30
  • 打赏
  • 举报
回复
.386
.model flat, stdcall
option casemap:none

DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
MCIWndCreate PROTO :DWORD, :DWORD, :DWORD, :DWORD

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\winmm.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\winmm.lib

.data
DlgName db "Maindialog",0
PlayMsg db "Play Button Pressed",0
PauseMsg db "Pause Button Pressed",0
StopMsg db "Stop Button Pressed",0
buffer db 256 dup(0)
Library_Name db "msvfw32.dll",0
f_MCIWndCreate db "MCIWndCreate",0

.data?
hInstance HINSTANCE ?
mcihWnd dd ? ;handle of mci window
pFName dd ?
hLibrary dd ?
p_MCIWndCreate dd ?
Mp3Paused BOOLEAN ?
Mp3Position DWORD ?
Mp3End DWORD ?
TimerID dd ?

.const
IDC_EDITMP3 equ 300
IDC_BTNPLAY equ 301
IDC_BTNPAUSE equ 302
IDC_BTNSTOP equ 303
MCIWNDF_NOOPEN equ 8000h
MCIWNDOPENF_NEW equ 1h

include mci.mac

.code
start:

invoke GetModuleHandle, NULL
mov hInstance,eax

invoke LoadLibrary, ADDR Library_Name
mov hLibrary, eax
invoke GetProcAddress, eax, ADDR f_MCIWndCreate
mov p_MCIWndCreate,eax

invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
invoke ExitProcess,eax

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
mov mcihWnd, NULL
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog, hWnd,NULL
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF lParam==0
.ELSE
mov edx,wParam
shr edx,16
.IF dx==BN_CLICKED
.IF ax==IDC_BTNPLAY
MCIWndDestroy mcihWnd
invoke GetDlgItemText, hWnd, IDC_EDITMP3, addr buffer, 100
push offset buffer
pop pFName
invoke MCIWndCreate, hWnd, hInstance, WS_CHILD or MCIWNDF_NOOPEN, pFName
MCIWndGetEnd mcihWnd
mov Mp3End, eax
MCIWndPlay mcihWnd
MCIWndUseTime mcihWnd
mov Mp3Paused, FALSE
invoke SetTimer, hWnd, 1, 1000, NULL
mov TimerID, eax
.ELSEIF ax==IDC_BTNPAUSE
.IF Mp3Paused==FALSE
MCIWndPause mcihWnd
mov Mp3Paused, TRUE
.ELSE
MCIWndResume mcihWnd
mov Mp3Paused, FALSE
.ENDIF
.ELSEIF ax==IDC_BTNSTOP
MCIWndDestroy mcihWnd
invoke KillTimer, hWnd, TimerID
.ENDIF
.ENDIF
.ENDIF
.ELSEIF uMsg==WM_TIMER
MCIWndGetPosition mcihWnd
.IF eax==Mp3End
MCIWndHome mcihWnd ;reset to start
MCIWndPlay mcihWnd ;play again
.ENDIF
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp

;----------Procedure shamelessly taken from Ron Thomas---------
MCIWndCreate proc hWnd:DWORD, _hInstance:DWORD, Style:DWORD, szFile:DWORD

push szFile
push Style
push _hInstance
push hWnd

call p_MCIWndCreate ; Call the dll routine using a pointer

mov mcihWnd,eax
pop eax
pop eax
pop eax
pop eax

ret
MCIWndCreate endp
;-------------------------------------------------------------

end start

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧