Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi Visual Studio 2019中的三个com端口通信程序_Winapi_Visual C++ - Fatal编程技术网

Winapi Visual Studio 2019中的三个com端口通信程序

Winapi Visual Studio 2019中的三个com端口通信程序,winapi,visual-c++,Winapi,Visual C++,如果有三个com端口ex、COM10、COM11、COM12。 我想连接所有新的三个com端口,并按顺序将数据传输到COM10、COM11、COM12 我应该使用CreateFile三次吗 //我的源代码 处理m_hComm; m_hComm=CreateFile(szPort,//通信端口字符串(COMX) GENERIC_READ | GENERIC_WRITE,//读/写类型 0,//必须以独占访问权限打开通信设备 NULL,//没有安全属性 OPEN\u EXISTING,//通信设备必

如果有三个com端口ex、COM10、COM11、COM12。 我想连接所有新的三个com端口,并按顺序将数据传输到COM10、COM11、COM12

我应该使用CreateFile三次吗

//我的源代码
处理m_hComm;
m_hComm=CreateFile(szPort,//通信端口字符串(COMX)
GENERIC_READ | GENERIC_WRITE,//读/写类型
0,//必须以独占访问权限打开通信设备
NULL,//没有安全属性
OPEN\u EXISTING,//通信设备必须使用OPEN\u EXISTING
文件_属性_正常|文件_标志_重叠,//异步I/O
0);                            // 对于通信设备,模板必须为0
当您希望按顺序向COM10、COM11、COM12传输数据时,如何设置每个com端口的句柄值

//我的源代码
n=写入文件(m_hComm、pBuff、nToWrite、dwwrite和m_ovrWrite);

在使用任何端口之前调用
CreateFile
三次,如果端口是实现所需功能的最佳方式。否则,您将不得不重复“创建”每个端口,发送(“写入”)数据,然后关闭每个端口的句柄(通过调用
CloseHandle
),这将大大降低效率

(注意:对于索引大于9的COM端口,应使用“”语法。)

因此,要同时打开这三个端口,可以使用句柄数组(和端口名称数组);像这样:

char szPort[3][10]={“\\\.\\COM10”、“\\.\\COM11”、“\\.\\COM12”};
句柄m_hComm[3];
对于(int i=0;i<3;++i){
m_hComm[i]=CreateFile(szPort[i],//通信端口字符串(COMX)
GENERIC_READ | GENERIC_WRITE,//读/写类型
0,//必须以独占访问权限打开通信设备
NULL,//没有安全属性
OPEN\u EXISTING,//通信设备必须使用OPEN\u EXISTING
文件_属性_正常|文件_标志_重叠,//异步I/O
0);//对于通信设备,模板必须为0
}
然后,您可以使用
m_hComm
数组中的适当值将数据发送到任何一个打开的端口。因此,要向三个端口中的每个端口发送相同的数据,可以使用如下循环:

for(int p=0;p<3;++p){//循环将相同的数据发送到所有三个端口。。。
//...
BOOL n=WriteFile(m_hComm[p]、pBuff、nToWrite和dwwrite以及m_ovrWrite);
//...
}

请随时要求进一步澄清和/或解释。

@leeyongjun如果您选择将“跟进”作为新问题发布,请随时在此处添加评论,让我知道。如果我能帮忙,我会的。