2017-09-04 113 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