2017-09-04 191 views
0

我正在写一个C++程序来读取串口(在我的情况下是COM6)。打开COM端口。我总是发现在互联网这个代码:C++用CreateFile从串口读取

HANDLE serialHandle; 

serialHandle = CreateFile(L"COM6", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 

我的问题是,我收到以下错误:

  • “拉手”:标识符找不到
  • “的CreateFile”:标识符找不到
  • 'GENERIC_READ':未声明的标识符
  • 'INVALID_HANDLE_VALUE':未声明的标识符
  • ...

我的代码:

#include <windows.h> 
#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <tchar.h> 
#include <stdio.h> 
#include <strsafe.h> 
using namespace std; 


int main() 
{ 
    /*int comPortNmr = 6, speed = 115200; 
    cout << "Serial Line: > "; 
    cin >> comPortNmr; 
    cout << endl; 
    cout << "Speed: > "; 
    cin >> speed; 
    cout << endl; */ 

    HANDLE serialHandle; 
    // Open serial port 
    serialHandle = CreateFile(L"COM6", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 

    if (serialHandle == INVALID_HANDLE_VALUE) 
    { 
     cout << "Error." << endl; 
    } 
    else 
    { 
     cout << "Opend." << endl; 
    } 

    return 0; 
} 

我在做什么错?

+0

无法重现。你使用什么IDE /编译器?你有没有安装适当的Windows SDK? – Ron

+0

我正在使用默认的Visual Studio 2017 IDE /编译器。我没有改变任何设置。 – User987123

+1

@ User987123如果您在不调整设置的情况下安装VS'17,Windows SDK将不会安装。请调整您的设置并重试。 – Blacktempel

回答

1

如果您正在使用预编译头文件,那么直到#include "stdafx.h"行(包括行#include "stdafx.h")的任何内容都应该已经是预编译头文件的一部分。所以编译器会跳过。

因此请确保#include "stdafx.h"始终是第一个#include

+0

非常感谢。现在它工作:) – User987123

2

如果您在未调整设置的情况下安装VS'17,Windows SDK将不会安装。

请重新检查您的VS'17安装并安装合适的Windows SDK。

+0

https://stackoverflow.com/questions/44325182/cant-change-windows-sdk-version-in-visual-studio-c-project有一些Windows SDK的小截图。 – Blacktempel

+0

我使用的是Windows7,但在Visual Studio安装程序中,我只能安装适用于Windows 10的SDK。我现在应该做什么? – User987123

+0

@ User987123安装最新的10或8.1。目前无法确切知道您需要哪一个。它将在Windows 7上运行。 – Blacktempel