有没有办法在c#中编写串口重定向器?我有一个应用程序,编码使用端口1(com1 :)但是,我在掌上电脑上的端口(Intermec CN50)总是3.我无权修改移动软件,但我想重定向任何数据去out to 1将其复制到3并将所有数据从3复制到1,因此应用程序不知道其中的区别。
我知道这是一个棘手的问题,但我相信你们其中一个人有答案。
我确定不会。
由于 克里斯
答案 0 :(得分:3)
不,没有。您有几种选择,具体取决于设备和您的确切需求。
第一个也是最简单的方法是重定向驱动程序。 如果您的设备尚未定义COM1设备,则可以在HKLM\drivers\builtin
中修改注册表,并将特定端口的索引从3
更改为{{1} }。这将导致device.exe将端口公开为COM1而不是COM3。根据我的经验,这不太可行,因为大多数串口都设置为让操作系统自动分配索引,这意味着COM1和COM2已经在使用中。但是,你仍然可以解决这个问题。您只需要为设备明确地为每个3或3以下的实例分配索引。将索引1移至3并将索引3移至1,您可以有效地交换端口。
以下是一些示例 - 有一些例子,因为它取决于OEM如何设置驱动程序初始化。这是一个没有显式端口命名的驱动程序示例(在本例中为I2C,但它的工作方式相同):
注意有1
和Prefix
。该驱动程序将枚举为“I2C0:”。如果您将Index
值更改为其他值,请说“2”,那么它将枚举为“I2C2:”。
在某些情况下,驱动程序可以提供特定的端口名称,如下所示:
请注意,Index
值与Port
加Prefix
相匹配。不知道如果你手动设置不同会发生什么,所以不要这样做。如果你想将这个移到COM3,你可以将Index
更改为3并将Index
更改为COM3,但是您必须确保注册表中没有其他内容已设置为使用这些值。您不希望两个驱动程序实例尝试枚举相同的索引。如果你这样做,我认为行为是第二个只是增加,但最好明确地将值设置为唯一,这样你就知道发生了什么。
如果这不符合您的需求,您必须编写实际的设备驱动程序来执行端口移动/聚合。它可以像Windows Mobile下的现有GPS中间驱动程序(GPSID)一样工作,并允许您将串行数据重定向到您想要的任何端口。但是,这必须用C编写,因为托管代码(在CF中)无法导出本机符号,因此无法使device.exe加载C#程序集。