1

まず、現時点ではわからないことはわからないので、具体的な答えではなく、もっと良い質問を探していると思います。私の.Net/C#は十分にしっかりしていて、私のC /C++はまあまあです。

最近、特定のタスクを実行するための標準の.Net Frameworkにライブラリがないことがわかりました。サードパーティのライブラリをダウンロードするのは簡単ですが、そうでない場合は自分でダウンロードする方法を理解したいと思います。すでに存在しています。

最近のあるケースでは、WindowsでMIDIを比較的低レベルで処理する必要があり、MIDI用の.netラッパーをダウンロードして参照することで、「winmm.dll」が使用する必要のあるライブラリであることが誤ってわかりました。ソースを介して。これを実現するには、ラッパークラスを作成し、P/Invoke全体を実行する必要があることを理解しています。

次に行ったのは、Windows APIのドキュメントを検索して、「winmm.dll」のミステリーボックスで何が起こっているのかを把握することでした。嬉しいことに、ダウンロードできたWindowsSDK全体がありました。読み通します。「Windows開発」の「はじめに」セクションで、C++を介した基本事項の一部を説明しました。COM、Windowsヘッダーファイルについて少し話しましたが、要点を理解するのに十分なC++を知っています。

今、私はいくつかの問題で点をつなぐ助けが必要です:

1)これまでのところ、Windows SDKは、dll自体ではなく、特定のヘッダーファイルにプログラムすることを提案しているようですが、私が見つけた.netラッパーは、通常、ヘッダーファイルではなく特定の.dllを指します。 。

/// <summary>
/// Returns the number of MIDI input devices on this system.
/// </summary>
/// Win32 docs: http://msdn.microsoft.com/en-us/library/ms711608(VS.85).aspx
[DllImport("winmm.dll", SetLastError = true)]
public static extern UInt32 midiInGetNumDevs();

ヘッダーファイルとDLLは同じフォルダーにある必要があるという印象を受けましたが、Windows SDKには、すべてのWindowsヘッダーファイルを含むフォルダーが含まれており、DLLは含まれていません(ここでは、にマッピングするためのレジストリが機能していると思います)特定のライブラリ?)?これらのヘッダーファイルは最終的に実際のライブラリにどのようにマップされますか?また、.Netラッパーを作成するためにヘッダーファイルを処理する必要がないように見えるのはなぜですか?

2)winmm.dllのドキュメントが見つからないようですが、WindowsSDKの「WindowsAPI」リストで必要になる可能性のある関数への参照を見つけました。これらの関数はwinmm.dllにあります。ラッパーの作成を開始するために必要な特定のライブラリのドキュメントを見つけるにはどうすればよいですか?Windows MIDI機能にアクセスするためにwinmm.dllが必要になることを知らなかった場合、どうすればそれを自分で理解できたでしょうか。

3)一部のDLLはCOM、一部はプレーンWindows DLL、一部は.net DLLです...今後の違いをどのように判断できますか?前の2つのラッパーを作成するには、別のアプローチが必要になるようです。

4)MSDNには、すべてのAPIをリストした「Winmm.dll」のページはありません。それには十分で実用的な理由があると思いますが、それが何であるかわかりません。私は.Netの土地に慣れており、図書館が何をしているのか、そしてほとんど手間をかけずにそれをどのように使用するのかを理解することができます。

洞察を事前に感謝します。

4

2 に答える 2

2

これに関する聖書は、AdamNathansの優れた本「.NetとCOMの完全な相互運用性ガイド」です。

PInvokeといくつかのオーディオタイプの例が含まれています

于 2012-10-11T22:02:08.280 に答える
1

1)Windows APIのドキュメントには、各メソッド/列挙型などのヘッダー、ライブラリ、およびdllファイルが含まれています。これに気付くために読み通したとき、私はちょうど十分に下にスクロールしませんでした。ヘッダーファイルは、必ずしもdllと同じディレクトリにある必要はありません。その内容は、プログラムのコンパイル時に.cファイルにコピー/貼り付けされるだけです。ここで欠けていたのは、ここで読んだコンパイルのリンク段階でし

2)ドキュメントはそこにありました-私はそれを少し難しく探す必要がありました。

3)dllの種類を検出するにはどうすればよいですか?(COM、.NET、WIN32)

4)オーディオのAPIは理論的には複数のdllにまたがる可能性があるため、最善のアクションは、APIドキュメントを見つけ、ラップするメソッドを見つけ、それらのメソッドがどのdllに含まれているかを把握してから、それらの各DLLをインポートすることです。 。

于 2012-10-12T05:10:37.383 に答える