c# - 如何从 .Net 中的内存映射 I/O 端口读取?

标签 c# .net memory pointers io

.Net 中的标准指针可以做到这一点吗?还是需要求助于 P/invoke?

请注意,我不是在谈论对象引用;我说的是不安全代码中的实际 C# 指针。

最佳答案

C# 作为受管理和 protected 运行时引擎,不允许低级别硬件访问,并且与实际硬件关联的内存位置不可用。

您需要使用端口驱动程序或使用适当的 Windows API 用 C++ 或 C 编写您自己的端口驱动程序,以访问感兴趣的内存映射 I/O 区域。这将在比 C# 程序所能达到的更低的环中运行。

这就是为什么你看不到用 C# 编写的驱动程序的原因,虽然我知道很多是用 C++ 编写访问例程,但 C# 中的主要驱动程序逻辑。不过,这很棘手,因为崩溃和重新启动可能会变得棘手,更不用说同步和计时问题了(尽管 Windows 远非实时系统,但在较低级别的 C++ 中这些问题更为具体)。

-亚当

关于c# - 如何从 .Net 中的内存映射 I/O 端口读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/207291/

相关文章:

c - 动态向 char * 添加单词

.net - OutOfMemoryException/ERROR_COMMITMENT_LIMIT 系统中有大量空闲内存

.NET 合并类库引用

C#:涉及空引用时重载 == 运算符的最佳实践

c# - MonoTouch.Dialog:节标题 View 中颠倒的文本

ios - @try-@finally 保证在处理 ARC 未跟踪的对象时消除内存泄漏

windows - 关于内存页保护的问题

c# - LINQ 中的维恩图样式分组

c# - 为什么 EF 获取所有记录,然后通过 PK 再次获取所有记录

c# - wpf 命令控制可见性