vb.net

2012-03-21 4 views
2

을 클릭 버튼에 사운드를 추가하는 간단한 방법은 내가 오류vb.net

Declare Function apisndPlaySound Lib "winmm" Alias "sndPlaySoundA" _ 
(ByVal filename As String, ByVal snd_async As Long) As Long 


Function PlaySound(ByVal sWavFile As String) 
    ' Purpose: Plays a sound. 
    ' Argument: the full path and file name. 

    If apisndPlaySound(sWavFile, 1) = 0 Then 
     MsgBox("The Sound Did Not Play!") 
    End If 
End Function 

호출을 얻고 나는이 온라인을 발견이

을하는 간단한 방법이 있나요인가 PInvoke 함수 'WindowsApplication3! WindowsApplication3.Module1 :: apisndPlaySound'가 스택의 불균형을 일으켰습니다. 관리되는 PInvoke 서명이 관리되지 않는 대상 서명과 일치하지 않기 때문일 수 있습니다. PInvoke 서명의 호출 규칙 및 매개 변수가 대상 관리되지 않는 시그니처와 일치하는지 확인하십시오.

+0

도움이 되었습니까? 문제가 해결 되었습니까? –

답변

1

사용 SoundPlayer 클래스는, VB.net 당신이 내에 액세스 할 수 있습니다 예 : 키워드 :

My.Computer.Audio.Play(location) 

버튼을 클릭하면 사용자가 버튼을 클릭 할 때마다 * .wav 파일을 읽는 병목 현상 병목 현상 (입출력을 최대화 함)이 발생합니다. 이 경우 내가 사용하는 것이 좋습니다 :

Beep() 

또한는 Win32 API의에 의지하기 전에, 먼저 .NET Framework의 방법을 연구/조사하여 엄지 손가락의 일반적인 규칙, KISS있다. HTH

+2

정렬 소리가 눈에 띄는 대기 시간을 제공하지 않을 것이라고 생각합니다. 그리고 '삑'소리는 거의 대체 할 수 없습니다. –

+0

@KonradRudolph 대리인이 우수합니다! 몇 번이나 귀하의 의견을 다시 읽었습니다. 여기에 OP의 관심에 대해 내가 퍼크 병목 현상을 접하는 방법을 설명하는 게시물이 있습니다. wav를 사용하면 파일이 작아야합니다. http://stackoverflow.com/questions/8469111/playing-a-wav-too-fast-messes-up/8483772 # 8483772 콘라드에 나를 태워 주셔서 감사합니다. –

0

나는 winnm.dll에서 PlaySound에 대해 완전히 다른 서명을 발견했습니다.
PInvoke.net에 따르면 당신은

<DllImport("winmm.dll")> _ 
Shared Function PlaySound(_ 
    ByVal szSound As String, _ 
    ByVal hModule As UIntPtr, _ 
    ByVal fdwSound As Integer) As Integer 
End Function 

을 선언하고 함께 호출해야합니다 :

PlaySound(sWavFile, IntPtr.Zero, SoundFlags.SND_FILENAME Or SoundFlags.SND_ASYNC) 

어디

SoundFlags.SND_FILENAME = &H20000 
SoundFlags.SND_ASYNC = &H1 
+0

'PlaySound'! ='sndPlaySound'. –

0

According to MSDN, 서명에는 (부호없는) Integer이 아니라 Long이 필요합니다. 반환 값과 동일합니다. 찾은 샘플 코드는 아마도 VB6 용이었습니다. sndPlaySound 만 어쨌든 이전 버전과의 호환성을 위해 존재하기 때문에

Declare Function apisndPlaySound Lib "winmm" Alias "sndPlaySoundA" _ 
    (ByVal filename As String, ByVal snd_async As UInteger) As Integer 

... 또는 당신은 스티브에 의해 발견 된 PlaySound 기능을 사용합니다. 더 나은 점은 Jeremy가 선보인 내장 기능을 사용하는 것입니다.