- ベストアンサー
シリアル通信について。
PICからPCにデータ(電圧:最大値5)を受信させようとしています。 受信には C++を用いたプログラムを自作したいのですが、 どうしてもうまくいかなかったため投稿させていただきました。 症状としては、まずポートを開く事すら出来ていません。 RS232c {USBで変換) が接続されているポートはCOM1です。 ポートが開くか確かめるプログラムとしては、次のようなソースを使いました。 #include<windows.h> #include<iostream> using namespace std; int main(void){ HANDLE hCom; hCom = CreateFile( (LPCWSTR)"COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hCom == INVALID_HANDLE_VALUE) { cout<<"シリアルポートを開くことが出来ませんでした。\n"<<endl; return false; } CloseHandle( hCom ); return 0; } これを実行すると「シリアルポートを開くことが出来ませんでした。」としかなりません。 ( (LPCWSTR)"COM1"となっているのは、「'CreateFileW' : 1 番目の引数を 'const char [5]' から 'LPCWSTR' に変換できません。」 と出てしまったためです。) ハイパーターミナルを用いてCOM1からデータを受信できていることは確認しましたので、 通信が出来ていないわけではないようなのです。 ありふれた質問である事は重々承知の上ですが、 このソースでシリアルポートが開けない理由を教えていただければ幸いです。 環境:Visual C++ 2008 Express Edition Microsoft Windows XP Version 2002 Service Pack 3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> (LPCWSTR)"COM1", キャストしてエラーを隠しただけでは、データ型は変換されませんよ。 TEXT("COM1") としておけば良いんじゃないかな。
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
VC2008は標準でUnicode版のライブラリが使われます 先の回答者のように TCHAR.Hなどをインクリュードして _TまたはTEXTマクロなどで文字列くくるといった方法と VC2008のメニューから プロジェクト > プロパティ 左ペインで 構成のプロパティ > 全般を選択す 右ペインの文字セットを『マルチバイト文字セットを使用する』に変更して プロジェクト > リビルド などを実行しましょう
お礼
マルチバイト文字を使用するでも動かす事が出来ました。 アドバイス感謝です!
- Yanch
- ベストアンサー率50% (114/225)
●補足 TEXT()マクロを使うのに、 #include <wchar.h> が必要かも。
お礼
#include<wchar.h>はインクルードしなくても動きましたが、心配なので一応入れておきます。 補足説明有難う御座います。
お礼
無事動かす事が出来ました! (LPCWSTR)"COM1"としただけではキャストされないんですね。 アドバイス有難う御座いました。