2009-03-03 13 views
0

私はVS2005を使用していて、VBMでプロジェクトを作っています winmm.dllファイルを追加しようとしていましたが、このエラーが発生しました。winmm.dllを参照として追加することはできません

「C:¥Documents and Settings¥rhyatco¥My Documents¥winmm.dll」への参照を追加できませんでした。これは有効なアセンブリまたはCOMコンポーネントではありません。拡張子 'dll'を持つアセンブリとCOMコンポーネントのみを参照できます。ファイルがアクセス可能であり、有効なアセンブリまたはCOMコンポーネントであることを確認してください。

私は既に2つのwinmm.dllをダウンロードしましたが、実際にはうまく動作しません。

+0

あなたのやりたいことを教えてください。あなたがしたいことをやろうとした方法ではありません。その後、私たちはあなたに知的な答えを与えることができ、あなたが考えることのない他の解決策を与えることができます。 – Stefan

答えて

1

おそらくwinmm.dllはCOM DLLでも.NETアセンブリでもないためです。

4

Winmm.dllには、comコンポーネントまたは.netタイプではなくwin32 api関数が含まれています。

VBのDLLでこの関数を使用するには、 "declare文"を使用する必要があります。

「declare statements」の構文に関する情報は、hereです。

+0

+1正確。そしてTSが彼/彼女が私たちが宣言を助けることができる使用したいAPIを指示するならば。 – Stefan

0

あなたが他のすべてのAPIの例と定義を取得するために後藤http://www.pinvoke.net/音(pinvoke.netからコピーされた例)を再生するには、たとえばWINMM.DLL使用する場合:

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 
+0

あなたが提供してくれてありがとう。 –

+0

他の例がほしいと思ったら、ちょうどあなたが望むものを言う。 – Stefan

0

だけ補足。 Declare Lib Libnameステートメントは、パスが指定されていない場合は、複数の場所でLibnameを検索します。 winmm.dllは長い間Windowsの一部であり、その一部であり、ほとんどのインストールでは "system32"フォルダにあります。そのため、Declare Lib "winmm.dll"は単純に機能します。

関連する問題