2015-10-15 66 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