[英]create a wrapper for libraries c#
有時,如果我可以使用其他一些程序 dll 並自定義它們,那就太好了。 例如,有一個名為 usb uirt 的設備,我可以在其中從計算機發送 ir 信號。 用於發送信號的軟件很糟糕,設備的驅動程序帶有很多 dll。 結果,我嘗試將它們導入 Visual Studio,但無法創建參考。 那可能是因為我認為它們可能是用不同的語言編寫的。 但是有人設法獲得了這些庫的包裝器,當我導入這些 dll 時,它起作用了,我能夠從 c# 控制設備,這很棒。
無論如何,我只是對此感到好奇,我想了解更多關於它的信息......我怎么知道我什么時候可以使用這些 dll? 他們在哪里創建的語言是什么? 我試過用谷歌搜索,我發現了類似的東西:
[DllImport("my.dll")]
static extern void methodA(UInt32[] data);
[] 是什么意思? 有時他們使用指針......根據我的經驗,我從來沒有使用過指針。 我總是可以在 c# 中通過引用或值加上在代表的幫助下傳遞一個變量我不覺得需要指針,但也許我錯了......我有興趣了解這一切。 我應該谷歌什么短語來了解這個?
您正在尋找的是P/Invoke 。
[] 是什么意思?
這是您向 function 調用添加屬性的方式。 這是DllImportAttribute
。
或者,如果您指的是UInt32[]
中的括號集,則這表示這是 UInt32 的數組。
有時他們使用指針...
可以在 C# unsafe
代碼中創建指針,但是對於 P/Invoke 使用,有一個更好的系統稱為marshalling 。 編組允許在您的托管 C# 代碼和 DLL 中的非托管代碼之間轉換類型。 例如,有一個IntPtr
class 用於表示您可以在方法聲明中使用的整數指針,但您通常只需傳入一個常規 integer ,編組代碼將自動為您轉換它。
我怎么知道什么時候可以使用這些 dll? 他們在哪里創建的語言是什么?
我不確定如何判斷給定的 DLL 是否被管理,但是關於給定的 DLL 是用什么語言編寫的是無關緊要的,並且在編譯后很難確定。
[DLLImport]
是一個 class 屬性。 這是 C# 的標准部件。 您可以在此處閱讀有關屬性的更多信息 -屬性(C# 和 Visual Basic)
UInt32[] data
中的這個[]
表示它是 UInt32 對象的數組。 這也是 C# 的標准部件。 您可以在此處閱讀 C# 中有關 arrays 的更多信息 - Arrays(C# 編程指南)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.