从C#访问硬件或内存

时间:2015-10-15 10:15:17

标签: c#

是否可以通过C#调用Win32 API或通用DLL来实现 直接访问硬件或内存?

我读到了互操作性,不安全的e非托管DLL ......

例如,如果我在C中编写一个ID掩码,那就是将某些位掩码到 一个设备是否可以从C#调用该DLL?

以同样的方式,如果我在C中编写一个分配一块raw的DLL 内存,提供读写功能,可以从C#调用 那个DLL读取或写入那块内存?

2 个答案:

答案 0 :(得分:5)

基本上,可以从C#调用本机Windows dll;可以找到教程和定义here的技术称为“平台调用”。从用户的角度来看,必须在C#中重新定义相应dll中使用的方法签名和类型 - 然后,方法签名必须配备合适的DllImport属性,该属性记录为here。在引用的dll中,可以执行各种所需的“本机”事物。

答案 1 :(得分:1)

  

是否可以从C#调用Win32 API或直接访问硬件或内存的通用DLL?

没有。虽然您可以从C#调用Win32 API,但没有Win32 API可以直接访问内存或硬件。只有设备驱动程序才能直接访问内存或硬件。

您的C#代码,实际上是非托管的Win32代码,以用户模式执行。用户模式代码无法直接访问内存或硬件。为此,代码必须在内核模式中执行,这需要设备驱动程序。

无法在C#中实现设备驱动程序。通常,设备驱动程序在C中实现。您可以实现设备驱动程序来执行您需要执行的任何操作,并通过调用DeviceIoControl从C#进行通信。