fengyunyu 发表于 2020-8-27 10:35:27

求解createfile打开串口失败

    com_handle = CreateFile("\\\\.\\COM28",
                GENERIC_READ|GENERIC_WRITE, //允许读和写操作
                0, //独占方式
                NULL,
                OPEN_EXISTING, //打开一个存在的串口
                FILE_ATTRIBUTE_NORMAL,
                NULL);

fengyunyu 发表于 2020-8-27 10:35:58

com28是usb转串口,按网上百度的方法,也没有成功

Himem 发表于 2020-8-27 10:58:35

查了下我以前也这么写的没问题

azeng 发表于 2020-8-27 11:02:02

#define COMM                        L"COM3"

        hcomm = CreateFileW(COMM,
                                                GENERIC_READ | GENERIC_WRITE,
                                                0,
                                                NULL,
                                                OPEN_EXISTING,
                                                0,
                                                0);
这是我用的,仅供参考。

shiva_shiva 发表于 2020-8-27 11:06:29

看一下错误码,确定原因。

if (hCom == INVALID_HANDLE_VALUE)
        {
                TCHAR szBuf;
      LPVOID lpMsgBuf;
      
                dwError=GetLastError();
                printf("打开COM失败!错误原因 %ld\n", dwError);
                FormatMessage (
                                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                                    NULL,
                                    dwError,
                                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                                    (LPTSTR) &lpMsgBuf,
                                    0,
                                                NULL );
      wsprintf(szBuf, "出错信息 (出错码=%d): %s", dwError, lpMsgBuf);
      LocalFree(lpMsgBuf);
      //输出提示。
      printf("%s", szBuf);
      
                return FALSE;
        }
        else
        {
                printf("%s 打开成功!\n", cComName);
        }

canspider 发表于 2020-8-27 11:06:39

楼主,你至少得整个GetLastError的返回值啊,要不然看着你这代码猜啊

tim 发表于 2020-8-27 11:09:07

估计串口名搞错或串口已被占用

fengyunyu 发表于 2020-8-27 11:13:46

tim 发表于 2020-8-27 11:09
估计串口名搞错或串口已被占用

用友善的串口助手打开、关闭都是正常的

fengyunyu 发表于 2020-8-27 11:14:12

shiva_shiva 发表于 2020-8-27 11:06
看一下错误码,确定原因。

if (hCom == INVALID_HANDLE_VALUE)


错误码2

fengyunyu 发表于 2020-8-27 11:14:50

canspider 发表于 2020-8-27 11:06
楼主,你至少得整个GetLastError的返回值啊,要不然看着你这代码猜啊

错误码2

    // 硬件接口初始化
   
    com_handle = CreateFile("\\\\.\\COM28",
                GENERIC_READ|GENERIC_WRITE, //允许读和写操作
                0, //独占方式
                NULL,
                OPEN_EXISTING, //打开一个存在的串口
                FILE_ATTRIBUTE_NORMAL,
                NULL);
    if (com_handle != INVALID_HANDLE_VALUE)
    {

      DCB dcb;
      GetCommState(com_handle,&dcb);
      dcb.BaudRate = baudrate;
      dcb.Parity = 0;
      dcb.ByteSize = 8;
      dcb.StopBits = 1;
      SetCommState(com_handle,&dcb);
      SetupComm(com_handle, 4200, 4200);

      COMMTIMEOUTS CommTimeouts;
      GetCommTimeouts(com_handle, &CommTimeouts);
      CommTimeouts.ReadTotalTimeoutConstant = 1000;
      SetCommTimeouts(com_handle, &CommTimeouts);
    }
    else
    {
      DWORD error = GetLastError();
      printf("error:%d\n",error);
      return 1;
    }

canspider 发表于 2020-8-27 11:16:36

文件名写错了

shiva_shiva 发表于 2020-8-27 11:31:10

fengyunyu 发表于 2020-8-27 11:14
错误码2

    // 硬件接口初始化


2 是没有这个文件,没有这个串口吧

tim 发表于 2020-8-27 11:51:48

usb转串口拔了再插串口号可能会变

foxcase 发表于 2020-8-27 12:03:25

串口号超过10写法不一样。串口名错误

takashiki 发表于 2020-8-27 12:13:27

com_handle = CreateFile("\\\\.\\COM28",改为com_handle = CreateFile(_T("\\\\.\\COM28"),试一下

fengyunyu 发表于 2020-8-27 14:00:17

没有解决,怪了

john78 发表于 2020-8-27 14:57:32

CreateFile("\\.\\COM28",

fengyunyu 发表于 2020-8-27 14:58:27

字符集的问题,改为使用多字节字符集就对了

takashiki 发表于 2020-8-27 15:13:27

fengyunyu 发表于 2020-8-27 14:58
字符集的问题,改为使用多字节字符集就对了

所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。

fengyunyu 发表于 2020-8-27 15:19:58

本帖最后由 fengyunyu 于 2020-8-27 15:23 编辑

takashiki 发表于 2020-8-27 15:13
所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。

_T,大神莫怪,对vs不熟悉,加了这个宏后报错。#include <tchar.h>,加了这个头文件可以编译过了,谢谢

canspider 发表于 2020-8-27 15:23:12

takashiki 发表于 2020-8-27 15:13
所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。

连GetLastError都不知道人,你还能指望他知道用_T宏么

fengyunyu 发表于 2020-8-27 15:24:35

canspider 发表于 2020-8-27 15:23
连GetLastError都不知道人,你还能指望他知道用_T宏么

见笑了!
页: [1]
查看完整版本: 求解createfile打开串口失败