• ベストアンサー

シリアル通信について。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

> (LPCWSTR)"COM1", キャストしてエラーを隠しただけでは、データ型は変換されませんよ。 TEXT("COM1") としておけば良いんじゃないかな。

Deepmist66
質問者

お礼

無事動かす事が出来ました! (LPCWSTR)"COM1"としただけではキャストされないんですね。 アドバイス有難う御座いました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

VC2008は標準でUnicode版のライブラリが使われます 先の回答者のように TCHAR.Hなどをインクリュードして _TまたはTEXTマクロなどで文字列くくるといった方法と VC2008のメニューから プロジェクト > プロパティ 左ペインで 構成のプロパティ > 全般を選択す 右ペインの文字セットを『マルチバイト文字セットを使用する』に変更して プロジェクト > リビルド などを実行しましょう

Deepmist66
質問者

お礼

マルチバイト文字を使用するでも動かす事が出来ました。 アドバイス感謝です!

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

●補足 TEXT()マクロを使うのに、 #include <wchar.h> が必要かも。

Deepmist66
質問者

お礼

#include<wchar.h>はインクルードしなくても動きましたが、心配なので一応入れておきます。 補足説明有難う御座います。