gpt4 book ai didi

.net - 用于多个平台的 Mono 中的串行端口 (rs232)

转载 作者:行者123 更新时间:2023-12-04 18:29:40 25 4
gpt4 key购买 nike

我正计划在 .NET 中重新编写一个 Win32 应用程序( native C++)——很可能使用单声道,这样我就可以在 Win32、Linux 和 mac 上运行它。我试图解决的问题(仅真正为 Win32 开发)是串行端口定义的问题。当只有一个可执行文件时,通常如何识别平台差异。具体来说,COM 端口在 Windows 中被标识为 COM1 或类似的东西 (\.\COM),但在 linux 上它们被指定为/dev/ttyS0 之类的东西。

是否在运行时检查平台以获取此信息?

我认为唯一的区别在于港口的开放和关闭。读写是一样的。

也许这是一个更通用的问题,因为它适用于 mono/.NET 中任何特定于平台的内容。

你如何处理这个问题?在某些字符串资源或配置文件中,还是基于运行时平台硬编码和切换?

有任何代码示例吗?请注意,我是一名 C++ 开发人员,并不熟悉 .NET 中可用的所有类。有没有办法从 CLR 获取串行端口命名方案,或者有没有办法从 CLR 获取操作系统/平台?

如果 CLR 能够以更独立的方式呈现串行端口,那就太好了。也许那是不可能的。

谢谢,蒂姆

编辑

鉴于到目前为止的一个响应,我想我应该尝试一下
SerialPort.GetPortNames() 先枚举看看是否有效。 (在两个平台上)

在 win32 中用于更高的端口号和 USB 加密狗 - 它不像基本的 COM 端口枚举那么简单。

我将在这里报告调查结果。

最佳答案

在 .Net 中,您需要 System.IO.Ports。 “COM1”和“/dev/ttyS0”之类的名称是随机的操作系统名称。为什么需要对它们进行硬编码?用户应该从可用端口列表中选择一个。

显然,您在运行时确定此列表。事实上,对于 USB 转串口适配器,您可能需要考虑用户只有在启动您的程序后才发现他忘记连接他的 USB 转串口适配器的可能性。这意味着您应该在每次显示配置对话框时重新阅读此列表。 USB 适配器很可能不是 COM1,顺便说一句。

(我不能保证 SerialPort 的 Mono 实现的质量。快速的 google 搜索让我有点担心,但请自行测试)

关于.net - 用于多个平台的 Mono 中的串行端口 (rs232),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/434494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com