使用硬件通信进行高级编程

时间:2013-06-15 15:33:53

标签: c# c dll driver hardware

在控制实际硬件移动的C#应用​​程序中,如何进行通信?

如果PC通过USB连接到其他硬件并且已经为设备进行了低级编程(假设使用C),那么 高级C#将如何发送和接收命令设备?它只是一个连接到C代码的DLL并以这种方式进行的情况吗?

我正在寻找关于驱动程序场景的这种高级编程的一般性讨论。然而,这更像是一个假设情景,所以我没有任何细节可以提供给你。

感谢。

2 个答案:

答案 0 :(得分:2)

是的,通常会有一个带有C导出的.DLL。

有时您可能会发现使用P / Invoke直接从C#调用某些导出很困难。在这种情况下,您通常可以编写一个简单的C DLL来封装调用,并提供与P / Invoke更兼容的备用接口。

我还必须与看起来像文件的设备进行交互。在这些情况下,您必须使用特殊的文件名语法通过Windows API CreateFile()函数打开文件:

"\\.\deviceName"

我还必须使用P / Invoke来使用一些Windows API USB功能,例如描述here

正如您所看到的,有几种方法可以访问硬件库。

答案 1 :(得分:2)

与硬件通信通常涉及分层堆栈。

application
---------------------------------------------------
glue code (assembly) (managed code)
---------------------------------------------------
user space library (static or DLL) (unmanaged code)
---------------------------------------------------
user space driver interface
---------------------------------------------------
kernel space driver
---------------------------------------------------
hardware

其中一些图层可能是可选的。