尝试打开COM端口C++时FILE_NOT_FOUND
FILE_NOT_FOUND when trying to open COM port C++
我正在尝试使用C++打开一个用于读写的 com 端口,但我似乎无法通过实际打开它的第一阶段。我在手柄上得到一个INVALID_HANDLE_VALUE
与GetLastError FILE_NOT_FOUND
.我已经在网上搜索了几天,我还没有想法。我也在这个网站上搜索了有关COM的所有问题。
我已经扫描了现有端口(或者我相信)以获得正确的端口名称。
我还尝试了_T("COM1")
与斜杠、不带斜杠、带冒号、不带冒号和不带_T
我在 7 位机器上使用 Windows 64
。这是我得到的代码
我很高兴对此有任何投入
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++;
}
}
}
}
解决方案是使用
问题是,如果您的端口大于 9,那么您必须使用语法 LPCWSTR szPortName = L"\\.\COM11";
.
如果您使用的是 Windows 10 - 运行所有系统更新可能会有所帮助!
我遇到了同样的问题,即打开端口"COM4"ERROR_FILE_NOT_FOUND返回错误。以"管理员"身份运行程序时,它起作用了。现在,在更新到1511后,即使不以"管理员"身份运行,程序也可以打开" COM4"。
http://www.cplusplus.com/forum/windows/163855/使用 CreateFileA(...) 而不是 CreateFile(...)
ERROR_FILE_NOT_FOUND
可以在使用设备管理器更改分配的COM端口号后从CreateFile(L"\\.\COM1", ...)
和CreateFile(L"COM1:", ...)
生成。 禁用并重新启用设备,或拔下并重新连接 USB 适配器可解决此问题。
确认是程序还是系统的有用测试是在命令提示符下将数据发送到端口。 成功的测试将显示一个空行。 失败的测试将显示错误消息。
C:drop>echo > \.COM1
The system cannot find the file specified.
C:drop>echo > \.COM1
C:drop>
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- GCOV-工具合并:"not a gcov data file"
- 在 Ubuntu 16.04 下运行协程示例会得到"'experimental/coroutine' file not found"
- 如何修复'PCH Warning: header stop not at file scope'
- CMake,QT Quick & Visual Studio:"qrc:/main.qml:-1 File not found"
- 如何修复OSX中的"fatal error: 'sys/epoll.h' file not found"?
- 升级到Xcode 10.1后如何修复"fatal error: 'iostream' file not found"
- 在 macOS Mojave 上安装 sharpSAT - "'gmpxx.h' file not found"
- QT 创建器:无法添加 OpenCV dll 库 ( "File format not recognized" )
- OS X Eclipse C++ "Program File Does Not Exist"
- MinGW在代码块中构建时的ar.exe "could not create temporary file whilst writing archive: no more archived files
- 错误"<url> is not recognized as an internal or external command, operable program or batch file.
- GMOCK 叮当讨厌的错误"/usr/include/limits.h:123:16: fatal error: 'limits.h' file not found"
- 得"does not name a type when using static variable in *.c file"
- 具有链依赖项的简单生成文件。 "linker input file unused because linking not done" 和 g++ -c
- 使用 Clang 进行编译时"'omp.h' file not found"
- 尝试执行文件时出现"sh: ./<file> not found"错误
- 在Swift项目中集成Box2d会出现cassert file not found错误
- 扭矩3D建筑模板项目产生"nfd.h file not found"错误是VS2013