シリアル ポートのアドレス指定に Windows の CreateFile 関数を使用すると、TEXT / UNICODE に少し問題があるようです。誰かが私のエラーを指摘するのを手伝ってもらえますか?
VS 2008 を使用して VC++ で Win32 コンソール アプリケーションを作成しています。
次のように、シリアル ポートをアドレス指定するハンドルを作成できます。
#include <iostream>
#include <windows.h>
#include <string>
int main()
{
HANDLE hSerial;
hSerial = CreateFile( L"\\\\.\\COM20",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
return 0;
}
それは問題なく動作します (この\\\\.\\
ビットは、COM9 以上のコンポートに必要であり、COM9 までのコンポートでも機能します)。問題は、私のコンポートが常に COM20 であるとは限らないことです。そのため、ユーザーにそれが何であるかを指定してもらいたいと考えています。
ここに私が試したいくつかのことがあります:
#include <iostream>
#include <windows.h>
#include <string>
int main()
{
std::string comNum;
std::cout << "\n\nEnter the port (ex: COM20): ";
std::cin >> comNum;
std::string comPrefix = "\\\\.\\";
std::string comID = comPrefix+comNum;
HANDLE hSerial;
hSerial = CreateFile( comID,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
return 0;
}
これはコンパイルされず、次のエラーが返されます: error C2664: 'CreateFileW' : cannot convert parameter 1 from 'std::string' to 'LPCWSTR'
その場合、CreateFileAを指定するとうまくいくと思いましたが、基本的に同じエラーが発生しました。
私も試しました:
/*
everything else the same
*/
hSerial = CreateFile( TEXT(comID),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
これもコンパイルされず、エラー C2065: 'LcomID' : 宣言されていない識別子が返されます
私はあまり専門家ではありませんが、しばらくの間これに取り組んできました。L"\\\\.\\COM20"
ユーザーがcomportを指定でき、CreateFileが引き続き機能するように置き換える方法を誰かに教えてもらえますか? ありがとう!