使用此代码(主要是将irvine32.inc添加到github代码中(:https://gist.github.com/michaellindahl/7782978
TITLE MASM PlaySound (PlaySoundExample.asm)
includelib winmm.lib
INCLUDE Irvine32.inc
INCLUDE macros.inc
PlaySound PROTO,
pszSound:PTR BYTE,
hmod:DWORD,
fdwSound:DWORD
.data
deviceConnect BYTE "DeviceConnect",0
SND_ALIAS DWORD 00010000h
SND_RESOURCE DWORD 00040005h
SND_FILENAME DWORD 00020000h
file BYTE "t.wav",0
.code
main PROC
INVOKE PlaySound, OFFSET deviceConnect, NULL, SND_ALIAS
INVOKE PlaySound, OFFSET file, NULL, SND_FILENAME
exit
main ENDP
END main
您需要另外添加SND_ASYNC
标志。
声音异步播放,PlaySound立即返回在开始声音之后。终止异步播放波形声音,在pszSound设置为NULL的情况下调用PlaySound。
在MASM32中,您需要OR
它们的二进制位,因此您的函数arg的两个位都设置为类似于C.中的SND_ASYNC | SND_FILENAME
#define SND_ASYNC 0x0001
#define SND_FILENAME 0x00020000L
代码示例:
.model flat, stdcall
option casemap: none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
includelib Winmm.lib
PlaySoundA PROTO,
pszSound:PTR BYTE,
hmod:DWORD,
fdwSound:DWORD
.data
file BYTE "t.wav",0
szCaption db "Hello", 0
szText db "Hello World!", 0
.code
main PROC
INVOKE PlaySoundA, OFFSET file, NULL, 20001H ; SND_ASYNC | SND_FILENAME
INVOKE MessageBox, NULL, addr szText, addr szCaption, MB_OK
INVOKE ExitProcess, 0
main ENDP
END main