winmm.dll不能作为参考添加

时间:2009-03-03 08:47:26

标签: .net vb.net

我正在使用VS2005并在vb.net中创建一个项目, 我试图添加winmm.dll文件但是我收到了这个错误。

  

无法添加对“C:\ Documents and Settings \ rhyatco \ My Documents \ winmm.dll”的引用。这不是有效的程序集或COM组件。只能使用扩展名“dll”进行组装,并且可以重新引用COM组件。请确保该文件是可访问的,并且它是有效的程序集或COM组件。

我已经下载了2个winmm.dll,但它确实无法正常工作。

4 个答案:

答案 0 :(得分:5)

Winmm.dll包含win32 api函数,而不是com组件或.net类型。

要在VB中使用dll中的函数,您需要使用“declare statement”。

您可以找到有关“声明语句”here的语法的信息。

答案 1 :(得分:1)

可能是因为winmm.dll不是COM DLL,也不是.Net程序集。

答案 2 :(得分:0)

如果您想使用winmm.dll播放声音(从pinvoke.net复制的示例),请转到http://www.pinvoke.net/以获取所有其他API的示例和定义:

    Public Declare Auto Function PlaySound Lib "winmm.dll" (ByVal pszSound As String, ByVal hmod As IntPtr, ByVal fdwSound As Integer) As Boolean
Public Declare Auto Function PlaySound Lib "winmm.dll" (ByVal pszSound As Byte(), ByVal hmod As IntPtr, ByVal fdwSound As SoundFlags) As Boolean
<Flags()> _
Public Enum SoundFlags As Integer
    SND_SYNC = &H0
    SND_ASYNC = &H1
    SND_NODEFAULT = &H2
    SND_MEMORY = &H4
    SND_LOOP = &H8
    SND_NOSTOP = &H10
    SND_PURGE = &H40
    SND_NOWAIT = &H2000
    SND_ALIAS = &H10000
    SND_FILENAME = &H20000
    SND_RESOURCE = &H40004
End Enum

Public Shared Sub Play(ByVal strFileName As String)
    PlaySound(strFileName, IntPtr.Zero, SoundFlags.SND_FILENAME Or SoundFlags.SND_ASYNC)
End Sub

Public Shared Sub Play(ByVal waveData As Byte())
    'bad idea, see http://blogs.msdn.com/larryosterman/archive/2009/02/19/playsound-xxx-snd-memory-snd-async-is-almost-always-a-bad-idea.aspx
    PlaySound(waveData, IntPtr.Zero, SoundFlags.SND_ASYNC Or SoundFlags.SND_MEMORY)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ip As UIntPtr = UIntPtr.Zero
    Dim result As Boolean = PlaySound("C:\path\to\wav\file.wav", IntPtr.Zero, ip)
End Sub

答案 3 :(得分:0)

只是一个补充。如果未指定路径,Declare Lib Libname语句将在多个位置搜索Libname。 winmm.dll已经(并且一直)是Windows的一部分,并且在大多数安装中它都位于“system32”文件夹中。这就是Declare Lib "winmm.dll"简单有效的原因。