2011-07-19 55 views
0

有時,如果我可以使用一些其他程序的dll並定製它們將會很好。例如,有一個名爲usb uirt的設備,我可以從計算機發送ir信號。用於發送信號的軟件和設備中的驅動程序都附帶很多dll。因此,我嘗試將它們導入Visual Studio,但無法創建參考。這可能是因爲他們可能是用我認爲不同的語言寫成的。但有人設法得到這些庫的包裝,當我導入這些DLL的工作,我能夠控制設備從C#這是偉大的。創建庫的包裝c#

無論如何,我只是好奇這一點,我想了解更多關於它...我怎麼知道我什麼時候可以使用這些DLL?他們在哪種語言創建?我嘗試了谷歌搜索,我發現像這樣的東西:

[DllImport("my.dll")] 
static extern void methodA(UInt32[] data); 

[]是什麼意思?有時候他們會使用指針......從我的經驗來看,我從來不用使用指針。我總是可以在c#中通過引用或值傳遞一個變量加上代表的幫助我沒有找到需要的指針,但也許我錯了......我有興趣瞭解這一切。我應該通過Google瞭解這一點?

+1

首先搜索InterOp或P/Invoke:http:// pinvoke。net/ –

回答

2

你在找什麼是P/Invoke

[]是什麼意思?

這是您爲函數調用添加屬性的方式。這是DllImportAttribute

或者,如果您的意思是UInt32[]中的一組括號,那麼這表示這是UInt32's的array

有時他們使用指針...

有可能在C#unsafe代碼來創建的指針,但對於P用/調用有一個叫marshalling一個更好的系統。編組允許類型在您的託管C#代碼和DLL中的非託管代碼之間進行轉換。例如有一個IntPtr類用於表示指向您可以在方法聲明中使用的整數的指針,但通常您只需傳遞一個常規整數,編組代碼將自動爲您進行轉換。

如何判斷我什麼時候可以使用這些dll?他們在哪種語言創建?

我不確定如何判斷一個給定的DLL是否被管理,但是關於給定的DLL寫入的語言是不相關的,編譯後很難確定。

+1

我以爲OP在討論'[]'UInt32 []''''' – MusiGenesis

+0

@MusiGenesis我擴展了我的答案以防萬一,但聽起來有點奇怪,有人會知道屬性,但被數組混淆了,默認情況下,它幾乎在每種語言中都存在。 –

0

[DLLImport]是一個類屬性。這是C#的標準部分。你可以在這裏閱讀更多關於屬性 - Attributes (C# and Visual Basic)

[]UInt32[] data表示它是一個UInt32對象的數組。這也是C#的一個標準部分。您可以在這裏閱讀有關C#中數組的更多信息 - Arrays (C# Programming Guide)