2015-10-15 34 views
3

是否有可能從C#調用Win32 API或直接訪問硬件或內存的通用DLL ?從C訪問硬件或內存#

我讀到關於互操作性,不安全è非託管的DLL ...

例如,如果我用C編寫一個DLL,一些位掩碼位 設備可能之後,從C#調用DLL?

以同樣的方式,如果我在C中編寫一個分配一塊原始內存的DLL,提供讀寫功能,我可以從C# 調用那個DLL來讀取或寫入那塊內存?

+0

這就是很多.NET Framework的實現方式。最終它必須調用到本機操作系統。 – usr

回答

5

基本上,可以從C#調用本地​​Windows dll;該技術可以在其上找到教程和定義here,稱爲「平臺調用」。從用戶的角度來看,在dll中使用的方法簽名和類型必須在C#中重新定義 - 然後,方法簽名必須配備合適的DllImport屬性,該屬性記錄爲here。在引用的dll中,可以執行各種所需的「本地」事物。

1

是否有可能從C#調用Win32 API或直接訪問硬件或內存的通用DLL?

不。您可以從C#調用Win32 API,但沒有提供直接訪問內存或硬件的Win32 API。只有設備驅動程序才能夠直接訪問內存或硬件。

您的C#代碼和實際上非託管的Win32代碼在用戶模式中執行。用戶模式代碼不能直接訪問內存或硬件。爲此,代碼必須在內核模式中執行,並且需要設備驅動程序。

設備驅動程序無法在C#中實現。通常,設備驅動程序以C語言實現。您可以實現設備驅動程序以執行您需要執行的任何操作,並通過調用DeviceIoControl從C#與它進行通信。

+0

但是,如果我在C中開發設備驅動程序並創建一個DLL來管理它,我可以通過interop和Codor這樣的不安全的代碼在C#中使用該DLL嗎? – xdevel2000