尝试打开COM端口C+;时未找到文件+; 我试图打开一个用C++编写的COM端口,但我似乎无法通过第一个阶段来真正打开它。我在句柄上得到一个无效的\u句柄\u值 未找到带有GetLastError文件的。我已经在网上搜索了好几天了,我还没有什么想法。我也在这个网站上搜索了所有关于COM的问题

尝试打开COM端口C+;时未找到文件+; 我试图打开一个用C++编写的COM端口,但我似乎无法通过第一个阶段来真正打开它。我在句柄上得到一个无效的\u句柄\u值 未找到带有GetLastError文件的。我已经在网上搜索了好几天了,我还没有什么想法。我也在这个网站上搜索了所有关于COM的问题,c++,serial-port,C++,Serial Port,我已经扫描了现有的端口(或者我相信是这样),以获得正确的端口名称 我还尝试了带斜杠、不带斜杠、带冒号、不带冒号和不带 我在64位机器上使用Windows7 这是我得到的密码 我很乐意在这方面提供任何意见 void SendToCom(char* data, int len) { DWORD cbNeeded = 0; DWORD dwPorts = 0; EnumPorts(NULL, 1, NULL, 0, &cbNeeded, &dwPorts); //What will

我已经扫描了现有的端口(或者我相信是这样),以获得正确的端口名称

我还尝试了带斜杠、不带斜杠、带冒号、不带冒号和不带

我在64位机器上使用Windows7

这是我得到的密码

我很乐意在这方面提供任何意见

void SendToCom(char* data, int len)
{

DWORD cbNeeded = 0;
DWORD dwPorts = 0;
EnumPorts(NULL, 1, NULL, 0, &cbNeeded, &dwPorts);

//What will be the return value
BOOL bSuccess = FALSE;

LPCSTR COM1 ;

BYTE* pPorts = static_cast<BYTE*>(malloc(cbNeeded));
bSuccess = EnumPorts(NULL, 1, pPorts, cbNeeded, &cbNeeded, &dwPorts);
if (bSuccess){
    PORT_INFO_1* pPortInfo = reinterpret_cast<PORT_INFO_1*>(pPorts);
    for (DWORD i=0; i<dwPorts; i++)
    {
        //If it looks like "COMX" then          
        size_t nLen = _tcslen(pPortInfo->pName);
        if (nLen > 3)
        {
            if ((_tcsnicmp(pPortInfo->pName, _T("COM"), 3) == 0) ){
                COM1 =pPortInfo->pName;
                //COM1 ="\\\\.\\COM1";
                HANDLE m_hCommPort = CreateFile( COM1 ,
                    GENERIC_READ|GENERIC_WRITE,  // access ( read and write)
                    0,                           // (share) 0:cannot share the COM port
                    NULL,                           // security  (None)
                    OPEN_EXISTING,               // creation : open_existing
                    FILE_FLAG_OVERLAPPED,        // we want overlapped operation
                    NULL                            // no templates file for COM port...
                    );
                if (m_hCommPort==INVALID_HANDLE_VALUE)
                {
                    DWORD err = GetLastError();
                    if (err == ERROR_FILE_NOT_FOUND) {
                        MessageBox(hWnd,"ERROR_FILE_NOT_FOUND",NULL,MB_ABORTRETRYIGNORE);
                    }
                    else
                        if(err == ERROR_INVALID_NAME) {
                            MessageBox(hWnd,"ERROR_INVALID_NAME",NULL,MB_ABORTRETRYIGNORE);
                        }
                        else
                        {
                            MessageBox(hWnd,"unkown error",NULL,MB_ABORTRETRYIGNORE);
                        }
                }
                else{
                    WriteAndReadPort(m_hCommPort,data);
                }
            }
            pPortInfo++;
        }
    }
 }

}
void SendToCom(字符*数据,整数长度)
{
DWORD=0;
DWORD dwPorts=0;
枚举端口(NULL、1、NULL、0、&cbNeeded和&dworts);
//返回值是多少
BOOL bsucces=假;
LPCSTR COM1;
字节*pPorts=静态_转换(malloc(cbNeeded));
bSuccess=EnumPorts(NULL,1,pPorts,cbNeeded,&cbNeeded,&dworts);
如果(b成功){
PORT_INFO_1*pPortInfo=重新解释广播(pPorts);
用于(DWORD i=0;ipName);
如果(nLen>3)
{
如果(_tcsnicmp(pPortInfo->pName,_T(“COM”),3)=0)){
COM1=pPortInfo->pName;
//COM1=“\\\.\\COM1”;
HANDLE m_hCommPort=CreateFile(COM1,
GENERIC_READ | GENERIC_WRITE,//访问(读写)
0,//(共享)0:无法共享COM端口
NULL,//安全性(无)
OPEN_EXISTING,//创建:OPEN_EXISTING
文件\u标志\u重叠,//我们需要重叠操作
NULL//没有COM端口的模板文件。。。
);
if(m_hCommPort==无效的\u句柄\u值)
{
DWORD err=GetLastError();
if(err==找不到错误文件){
MessageBox(hWnd,“未找到错误文件”,NULL,MB\u ABORTRETRYIGNORE);
}
其他的
if(err==错误\u无效\u名称){
消息框(hWnd,“错误\无效\名称”,NULL,MB\ ABORTRETRYIGNORE);
}
其他的
{
消息框(hWnd,“未知错误”,NULL,MB_ABORTRETRYIGNORE);
}
}
否则{
写入端口(m_HComport,数据);
}
}
pPortInfo++;
}
}
}
}

解决方案是使用

问题是,如果端口大于9,则必须使用语法
LPCWSTR szPortName=L“\\\.\\COM11”

如果您使用的是Windows 10-运行所有系统更新可能会有所帮助

我遇到了同样的问题,打开端口“COM4”返回了一个错误\u FILE\u NOT \u FOUND。当以“管理员”身份运行该程序时,它工作正常。现在更新到1511后,程序可以打开“COM4”,即使不以“管理员”身份运行。


使用CreateFileA(…)而不是CreateFile(…)

\u T
已经冗余了10年了。Windows95已经死了。现在很难遇到COM1,它们是为传统硬件保留的。不要使用EnumPorts(),这是用于打印机的。使用HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM注册表项。如果
CreateFile()
\\.\COM1
COM1
都失败并出现错误2,则您确实没有安装COM1端口。进入
控制面板>设备管理器>端口
进行验证。感谢大家的输入。1.我没有串行通信2。我在设备下没有端口条目manager@RemyLebeau情况似乎并非如此。我得到了这个错误,但端口肯定列在设备管理器中。不知道为什么。你能再解释一下吗?不可能是windows 10,因为这个问题在windows 10出现之前很久就被问到了:)无论如何,谢谢