簡體   English   中英

為Windows API和COM DLL創建.Net Wrappers

[英]Creating .Net Wrappers for Windows API and COM DLLs

首先我要說的是,我不知道我現在還不知道的是什么,所以我也想找到更好的問題,而不是具體的答案。 我的.Net / C#足夠堅固,我的C / C ++就是meh。

最近,我發現標准的.Net框架中沒有庫來完成某些任務,雖然下載第三方庫很容易,但我想知道如果不這樣做,我自己該怎么做。已經存在。

在最近的一個案例中,我需要在相對較低級別的Windows中處理MIDI,我不小心發現“winmm.dll”是我需要通過下載.net包裝器來進行MIDI和瀏覽所需的庫通過來源。 我知道我必須創建一個包裝器類並完成整個P / Invoke事件才能實現。

我接下來要做的是搜索Windows API上的文檔來弄清楚“winmm.dll”的神秘框中發生了什么,令我高興的是,我可以下載一個完整的Windows SDK,通讀。 我瀏覽了“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的文檔,但是我在Windows SDK的“Windows API”列表中找到了我可能需要的函數的引用,我很確定代碼是這些功能都在winmm.dll中。 如何找到開始創建包裝器所需的特定庫的文檔? 如果我不知道我將需要winmm.dll來訪問Windows MIDI功能,我怎么能想到這一點呢?

3)有些DLL是COM,有些是普通的windows DLL,有些是.net DLL ...我怎么能告訴不同的前進? 似乎為前兩者創建包裝器需要采用不同的方法。

4)MSDN上沒有列出所有API的“Winmm.dll”頁面,我認為這有一個很好的實際原因,但我不確定它是什么? 我已經習慣了.Net在那里我可以弄清楚庫的功能以及如何使用它幾乎不費吹灰之力。

提前感謝任何見解。

關於這一點的聖經是Adam Nathans的優秀書籍.Net和COM完整的互操作性指南'

包括PInvoke和幾個音頻類型示例

1)windows API文檔包含每個方法/枚舉/等的頭文件,庫和dll文件。 當我通讀時注意到這一點,我只是沒有向下滾動。 頭文件不一定必須與dll在同一目錄中; 編譯程序時,只需將其內容復制/粘貼到.c文件中。 我在這里失蹤的部分是編譯的鏈接階段,我對閱讀這里

2)文檔就在那里 - 我只需要更加努力地尋找它。

3) 如何檢測dll的類型? (COM,.NET,WIN32)

4)音頻api理論上可以跨越多個dll,所以最好的做法是找到API文檔,找到你想要包裝的方法,然后找出那些方法所在的dll,然后導入每個DLL 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM