{"id":3510,"date":"2025-04-06T15:51:43","date_gmt":"2025-04-06T07:51:43","guid":{"rendered":"https:\/\/saludpcb.com\/zh\/?p=3510"},"modified":"2025-09-26T06:15:49","modified_gmt":"2025-09-25T22:15:49","slug":"com-port-detection-cpp-vscode-guide","status":"publish","type":"post","link":"https:\/\/saludpcb.com\/zh\/com-port-detection-cpp-vscode-guide\/","title":{"rendered":"2025 \u5982\u4f55\u7528 C++ \u6aa2\u6e2c COM Ports | \u5b8c\u6574 VSCode \u958b\u767c\u6559\u5b78"},"content":{"rendered":"\n<hr class=\"wp-block-separator alignwide has-text-color has-palette-color-1-color has-alpha-channel-opacity has-palette-color-1-background-color has-background is-style-wide\"\/>\n\n\n\n<p>\u5728\u7269\u806f\u7db2\uff08IoT\uff09\u9818\u57df\uff0c<strong>COM Port<\/strong>\uff08\u4e32\u884c\u7aef\u53e3\uff09\u4ecd\u7136\u662f\u8a31\u591a\u8a2d\u5099\u4e4b\u9593\u9032\u884c\u6578\u64da\u50b3\u8f38\u7684\u91cd\u8981\u65b9\u5f0f\u3002\u5118\u7ba1\u73fe\u4ee3\u8a2d\u5099\u666e\u904d\u4f7f\u7528 USB \u7b49\u66f4\u5148\u9032\u7684\u63a5\u53e3\uff0c\u4f46 COM \u57e0\u5728\u5d4c\u5165\u5f0f\u7cfb\u7d71\u3001\u5de5\u696d\u81ea\u52d5\u5316\u53ca\u820a\u5f0f\u786c\u9ad4\u4e2d\u4f9d\u7136\u5360\u6709\u91cd\u8981\u5730\u4f4d\u3002\u5728\u9019\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5011\u5c07\u5c55\u793a\u5982\u4f55\u4f7f\u7528 <strong>C++<\/strong> \u4f86\u958b\u767c\u4e00\u500b\u8de8\u5e73\u53f0\u7684 COM Port \u5217\u8868\u5de5\u5177\uff0c\u4e26\u4e14\u9032\u4e00\u6b65\u64f4\u5c55\u5230 IoT \u61c9\u7528\u4e2d\uff0c\u8b93\u4f60\u80fd\u5920\u66f4\u9ad8\u6548\u5730\u7ba1\u7406\u548c\u76e3\u63a7\u4f60\u7684\u8a2d\u5099\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/2025-Master-COM-Ports-with-C-Full-VSCode-Development-Guide.jpg\" alt=\"COM Ports\" class=\"wp-image-3514\" title=\"\" srcset=\"https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/2025-Master-COM-Ports-with-C-Full-VSCode-Development-Guide.jpg 1792w, https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/2025-Master-COM-Ports-with-C-Full-VSCode-Development-Guide-768x439.jpg 768w, https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/2025-Master-COM-Ports-with-C-Full-VSCode-Development-Guide-1536x878.jpg 1536w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>\u5167\u5bb9<\/h2><nav><ul><li class=\"\"><a href=\"#\u70ba\u4ec0\u9ebc\u9078\u64c7-vs-code-\u4f5c\u70ba-c-\u958b\u767c\u74b0\u5883\uff1f\">\u70ba\u4ec0\u9ebc\u9078\u64c7 C++ \u958b\u767c\uff1f<\/a><\/li><li class=\"\"><a href=\"#a\">\u4ec0\u9ebc\u662f COM Port ?<\/a><\/li><li class=\"\"><a href=\"#\u74b0\">\u74b0\u5883\u642d\u5efa<\/a><\/li><li class=\"\"><a href=\"#\u5efa\u7acb-vs-code-c-\u5c08\u6848\">\u5728 VSCode \u5efa\u7acb C++ \u5c08\u6848<\/a><\/li><li class=\"\"><a href=\"#com-port-\u5217\u8209\u7a0b\u5f0f\">COM \u57e0\u5217\u8868\u7a0b\u5f0f\u78bc<\/a><\/li><li class=\"\"><a href=\"#\u914d\u7f6e-c-make-lists-txt\">\u914d\u7f6e CMakeLists.txt<\/a><\/li><li class=\"\"><a href=\"#\u7de8\u8b6f\u8207\u57f7\u884c\">\u7de8\u8b6f\u8207\u57f7\u884c<\/a><\/li><li class=\"\"><a href=\"#\u7d50\u8ad6\">\u7d50\u8ad6<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u70ba\u4ec0\u9ebc\u9078\u64c7-vs-code-\u4f5c\u70ba-c-\u958b\u767c\u74b0\u5883\uff1f\">\u70ba\u4ec0\u9ebc\u9078\u64c7 C++ \u958b\u767c\uff1f<\/h2>\n\n\n\n<p><strong>\u9ad8\u6548\u80fd<\/strong>\uff1a C++ \u662f\u4e00\u7a2e\u7de8\u8b6f\u578b\u8a9e\u8a00\uff0c\u80fd\u5920\u751f\u6210\u9ad8\u6548\u7684\u6a5f\u5668\u78bc\uff0c\u9069\u5408\u9700\u8981\u9ad8\u6548\u80fd\u548c\u5373\u6642\u53cd\u61c9\u7684\u61c9\u7528\u7a0b\u5f0f\u3002\u76f8\u6bd4 Python \u7b49\u89e3\u91cb\u578b\u8a9e\u8a00\uff0cC++ \u66f4\u52a0\u5feb\u901f\uff0c\u5c24\u5176\u5728\u8655\u7406\u5927\u91cf\u6578\u64da\u3001\u904a\u6232\u958b\u767c\u6216\u5d4c\u5165\u5f0f\u7cfb\u7d71\u6642\uff0c\u6027\u80fd\u512a\u52e2\u660e\u986f\u3002<\/p>\n\n\n\n<p><strong>\u8cc7\u6e90\u63a7\u5236<\/strong>\uff1a C++ \u5141\u8a31\u958b\u767c\u8005\u5c0d\u8a18\u61b6\u9ad4\u9032\u884c\u7cbe\u78ba\u63a7\u5236\uff0c\u9019\u5c0d\u65bc\u9700\u8981\u4f4e\u5c64\u6b21\u7cfb\u7d71\u8abf\u512a\u6216\u786c\u9ad4\u4ea4\u4e92\u7684\u61c9\u7528\u7a0b\u5f0f\uff08\u5982\u9a45\u52d5\u7a0b\u5f0f\u3001\u5d4c\u5165\u5f0f\u7cfb\u7d71\uff09\u975e\u5e38\u91cd\u8981\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0cJava \u548c C# \u4f9d\u8cf4\u65bc\u5783\u573e\u56de\u6536\uff0c\u5c0d\u8a18\u61b6\u9ad4\u7684\u63a7\u5236\u8f03\u5f31\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a\">\u4ec0\u9ebc\u662f COM Port ?<\/h2>\n\n\n\n<p><strong>COM Port<\/strong>\uff08\u901a\u4fe1\u7aef\u53e3\uff09\u662f\u4e00\u7a2e\u786c\u9ad4\u63a5\u53e3\uff0c\u7528\u65bc\u8a08\u7b97\u6a5f\u8207\u5916\u90e8\u8a2d\u5099\u4e4b\u9593\u9032\u884c\u4e32\u884c\u901a\u4fe1\u3002\u5b83\u901a\u5e38\u7528\u65bc\u50b3\u8f38\u6578\u64da\u7684\u904e\u7a0b\u4e2d\uff0c\u4e26\u4e14\u662f\u820a\u5f0f\u8a08\u7b97\u6a5f\u4e2d\u6700\u5e38\u898b\u7684\u4e32\u884c\u7aef\u53e3\u4e4b\u4e00\u3002COM \u57e0\u4e5f\u88ab\u7a31\u70ba<strong>\u4e32\u884c\u7aef\u53e3<\/strong> \u6216 <strong>RS-232\u7aef\u53e3<\/strong>\u3002<\/p>\n\n\n\n<p>\u5118\u7ba1\u5982\u4eca USB \u7aef\u53e3\u53d6\u4ee3\u4e86 COM \u57e0\u6210\u70ba\u66f4\u5e38\u898b\u7684\u8a2d\u5099\u9023\u63a5\u65b9\u5f0f\uff0c\u4f46 COM \u57e0\u4ecd\u7136\u5728\u67d0\u4e9b\u9818\u57df\u4e2d\u6709\u5ee3\u6cdb\u7684\u61c9\u7528\uff0c\u7279\u5225\u662f\u5728 <strong>\u5d4c\u5165\u5f0f\u7cfb\u7d71<\/strong>\u3001<strong>\u5de5\u696d\u8a2d\u5099<\/strong>\u3001<strong>\u820a\u5f0f\u786c\u9ad4<\/strong> \u548c\u67d0\u4e9b <strong>\u8abf\u8a66<\/strong> \u61c9\u7528\u4e2d\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u74b0\">\u74b0\u5883\u642d\u5efa<\/h2>\n\n\n\n<p>\u958b\u59cb\u4e4b\u524d\uff0c\u8acb\u78ba\u4fdd\u5df2\u5b89\u88dd\u4ee5\u4e0b\u8edf\u9ad4\uff1a <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>VSCode<\/strong>\uff08<a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener\">\u4e0b\u8f09<\/a>\uff09<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/saludpcb.com\/zh\/premium-cpp-vscode-setup-guide\/\">C++ \u7de8\u8b6f\u5668<\/a><\/strong>\uff08GCC\/Clang\/MSVC\uff09<\/li>\n\n\n\n<li>CMake Tool \u64f4\u5c55<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u5efa\u7acb-vs-code-c-\u5c08\u6848\">\u5728 VSCode \u5efa\u7acb C++ \u5c08\u6848<\/h2>\n\n\n\n<p>\u5efa\u7acb\u4e00\u500b\u8cc7\u6599\u593e\u00a0<code>serial_port_lister<\/code> \u4e26\u958b\u555f VSCode \u518d\u5efa\u7acb\u5982\u4e0b\u7684\u6a94\u6848\u7d50\u69cb \uff0c\u4e26\u5728\u8cc7\u6599\u593e\u4e2d\u5efa\u7acb\u4ee5\u4e0b\u6a94\u6848\u7d50\u69cb\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">serial_port_lister\/\n\u251c\u2500\u2500 CMakeLists.txt   # CMake build configuration\n\u2514\u2500\u2500 main.cpp         # Code<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"com-port-\u5217\u8209\u7a0b\u5f0f\">COM \u57e0\u5217\u8868\u7a0b\u5f0f\u78bc<\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u6839\u64da\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7d71\u5217\u8209 COM \u57e0\u7684 C++ \u7a0b\u5f0f\u78bc\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include &lt;iostream>\n#include &lt;vector>\n#include &lt;string>\n\n#ifdef _WIN32\n#include &lt;windows.h>\n#include &lt;setupapi.h>\n#include &lt;devguid.h>\n#include &lt;regstr.h>\n#pragma comment(lib, \"setupapi.lib\")\n\n#elif defined(__APPLE__)\n#include &lt;dirent.h>\n#include &lt;sys\/stat.h>\n\n#else \/\/ Linux\n#include &lt;dirent.h>\n#include &lt;sys\/stat.h>\n#endif\n\nstd::vector&lt;std::string> listSerialPorts() {\n    std::vector&lt;std::string> ports;\n\n#ifdef _WIN32\n    \/\/ Windows implementation\n    HDEVINFO hDevInfo = SetupDiGetClassDevs(&amp;GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT);\n    if (hDevInfo == INVALID_HANDLE_VALUE) {\n        return ports;\n    }\n\n    SP_DEVINFO_DATA deviceInfoData;\n    deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);\n\n    for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &amp;deviceInfoData); i++) {\n        char buffer[256];\n        DWORD bufferSize = sizeof(buffer);\n\n        if (SetupDiGetDeviceRegistryPropertyA(\n            hDevInfo, &amp;deviceInfoData, SPDRP_FRIENDLYNAME,\n            NULL, (PBYTE)buffer, bufferSize, &amp;bufferSize)) {\n            ports.push_back(buffer);\n        }\n    }\n\n    SetupDiDestroyDeviceInfoList(hDevInfo);\n\n#elif defined(__APPLE__)\n    \/\/ macOS implementation\n    DIR* dir = opendir(\"\/dev\");\n    if (dir) {\n        struct dirent* entry;\n        while ((entry = readdir(dir)) != nullptr) {\n            std::string name = entry->d_name;\n            if (name.find(\"cu.\") == 0 || name.find(\"tty.\") == 0) {\n                ports.push_back(\"\/dev\/\" + name);\n            }\n        }\n        closedir(dir);\n    }\n\n#else\n    \/\/ Linux implementation\n    DIR* dir = opendir(\"\/dev\");\n    if (dir) {\n        struct dirent* entry;\n        while ((entry = readdir(dir)) != nullptr) {\n            std::string name = entry->d_name;\n            if (name.find(\"ttyS\") == 0 || name.find(\"ttyUSB\") == 0 || \n                name.find(\"ttyACM\") == 0 || name.find(\"ttyAMA\") == 0) {\n                ports.push_back(\"\/dev\/\" + name);\n            }\n        }\n        closedir(dir);\n    }\n#endif\n\n    return ports;\n}\n\nint main() {\n    std::cout &lt;&lt; \"Available COM Ports:\" &lt;&lt; std::endl;\n    \n    auto ports = listSerialPorts();\n    \n    if (ports.empty()) {\n        std::cout &lt;&lt; \"No COM ports found.\" &lt;&lt; std::endl;\n    } else {\n        for (const auto&amp; port : ports) {\n            std::cout &lt;&lt; \" - \" &lt;&lt; port &lt;&lt; std::endl;\n        }\n    }\n    \n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u914d\u7f6e-c-make-lists-txt\"><strong>\u914d\u7f6e CMakeLists.txt<\/strong><\/h2>\n\n\n\n<p>\u7576\u4f7f\u7528 CMake \u4f86\u69cb\u5efa\u5c08\u6848\u6642\uff0c\u4f60\u9700\u8981\u63d0\u4f9b\u4e00\u500b\u00a0<code>CMakeLists.txt<\/code>\u00a0\u6a94\u6848\uff0c\u8a72\u6a94\u6848\u63cf\u8ff0\u4e86\u5c08\u6848\u5982\u4f55\u88ab\u7de8\u8b6f\u548c\u93c8\u63a5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">cmake_minimum_required(VERSION 3.10)\nproject(SerialPortLister VERSION 1.0.0)\n\n# Basic settings\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\n\n# Platform-specific settings\nif(WIN32)\n    add_definitions(-DWIN32_LEAN_AND_MEAN)\n    find_library(SETUPAPI_LIB setupapi)\n    message(STATUS \"Found Windows setupapi.lib\")\nelseif(APPLE)\n    message(STATUS \"Configuring for macOS\")\nelse()\n    message(STATUS \"Configuring for Linux\")\nendif()\n\n# Main program\nadd_executable(${PROJECT_NAME} \n    main.cpp\n)\n\n# Link libraries\nif(WIN32)\n    target_link_libraries(${PROJECT_NAME} PRIVATE ${SETUPAPI_LIB})\nendif()\n\n# Installation settings (optional)\ninstall(TARGETS ${PROJECT_NAME}\n    RUNTIME DESTINATION bin\n)\n\n# Packaging settings (optional)\ninclude(InstallRequiredSystemLibraries)\nset(CPACK_PROJECT_NAME ${PROJECT_NAME})\nset(CPACK_PROJECT_VERSION ${PROJECT_VERSION})\ninclude(CPack)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u7de8\u8b6f\u8207\u57f7\u884c\"><strong>\u7de8\u8b6f\u8207\u57f7\u884c<\/strong><\/h2>\n\n\n\n<p>\u5728 VSCode \u4e2d\uff0c\u6309\u4e0b\u00a0<code>Ctrl (Cmd)+Shift+P<\/code>\uff0c\u7136\u5f8c\u8f38\u5165 <code>CMake: Build<\/code> \u4f86\u7de8\u8b6f\u5c08\u6848\u3002\u5b8c\u6210\u5f8c\uff0c\u57f7\u884c\u7a0b\u5f0f ( \u4ee5 <strong>macOS<\/strong> \u70ba\u4f8b )\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">.\/SerialPortLister<\/code><\/pre>\n\n\n\n<p>\u7d50\u679c :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Available COM Ports:\n - \/dev\/cu.usbserial-1234\n - \/dev\/tty.usbserial-5678<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u7d50\u8ad6\">\u7d50\u8ad6<\/h2>\n\n\n\n<p>\u9019\u500b\u7c21\u55ae\u7684\u8de8\u5e73\u81fa\u61c9\u7528\u7a0b\u5f0f\u5c55\u793a\u4e86\u5982\u4f55\u5728\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7d71\u4e0a\u5217\u8209\u4e32\u884c\u901a\u8a0a\u57e0\u3002\u901a\u904e\u4f7f\u7528\u689d\u4ef6\u7de8\u8b6f\uff0c\u6211\u5011\u53ef\u4ee5\u70ba\u6bcf\u500b\u5e73\u81fa\u63d0\u4f9b\u7279\u5b9a\u7684\u5be6\u73fe\uff0c\u540c\u6642\u4fdd\u6301\u7d71\u4e00\u7684\u63a5\u53e3\u3002\u4f60\u53ef\u4ee5\u9032\u4e00\u6b65\u64f4\u5c55\u9019\u500b\u7a0b\u5f0f\uff0c\u4f8b\u5982\uff1a\u6dfb\u52a0\u5716\u5f62\u7528\u6236\u754c\u9762\u3001\u6dfb\u52a0\u57e0\u8a73\u7d30\u4fe1\u606f\uff08\u5982\u88fd\u9020\u5546\u3001\u8a2d\u5099ID\uff09\u3001\u5be6\u73fe\u57e0\u76e3\u63a7\u529f\u80fd\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator alignwide has-text-color has-palette-color-1-color has-alpha-channel-opacity has-palette-color-1-background-color has-background is-style-wide\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u7269\u806f\u7db2\uff08IoT\uff09\u9818\u57df\uff0cCOM Port\uff08\u4e32\u884c\u7aef\u53e3\uff09\u4ecd\u7136\u662f\u8a31\u591a\u8a2d\u5099\u4e4b\u9593\u9032\u884c\u6578\u64da\u50b3\u8f38\u7684\u91cd\u8981\u65b9\u5f0f\u3002\u5118\u7ba1\u73fe\u4ee3\u8a2d\u5099\u666e\u904d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3514,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84],"tags":[27,21,44,9,11],"class_list":["post-3510","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","tag-c","tag-ide","tag-programming-language","tag-python","tag-tutorial"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/comments?post=3510"}],"version-history":[{"count":7,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3510\/revisions"}],"predecessor-version":[{"id":3518,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3510\/revisions\/3518"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media\/3514"}],"wp:attachment":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media?parent=3510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/categories?post=3510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/tags?post=3510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}