4

Visual Studio 2010 で C++ プログラムとのシリアル ポート通信用に arduino uno をセットアップしようとしています。ここにあるコードから作業しています: http://playground.arduino.cc/Interfacing/CPPWindows

残念ながら、.cpp ファイルでは、変数 'portName' の 9 行目に次のメッセージが表示されます。

エラー: タイプ "char *" の引数は、タイプ "LPCWSTR" のパラメーターと互換性がありません

このエラー メッセージの意味がわかりません。解決するためにいくつかの方法を試しました。どんな助けでも大歓迎です!

4

3 に答える 3

11

あなたの質問のコードリンクを考えると、問題はここにあるようです:

Serial::Serial(char *portName)
{
    ...

    this->hSerial = CreateFile(portName,  // <--- ERROR

CreateFileLPCTSTRは、最初の文字列パラメータとして期待される Win32 API です

LPCTSTR次のように展開される Win32 typedef です。

  • const char*ANSI/MBCS ビルドで
  • const wchar_t*Unicode ビルド (VS2005 以降のデフォルト)

VS2010 を使用しているため、おそらくデフォルトの Unicode ビルド モードになっています。

実際には、「物理的な」CreateFileAPI は公開されていませんが、2 つの異なる機能があります:CreateFileACreateFileW. 前者はconst char*入力文字列を受け取り、後者はconst wchar_t*.

Unicode ビルドでCreateFileは、に展開されたプリプロセッサ マクロCreateFileWです。ANSI/MBCS ビルドでCreateFileは、 に展開されCreateFileAます。

したがって、Unicode ビルド モードの場合、CreateFile 呼び出しは に展開されCreateFileW(const wchar_t*, ...)ます。portNameは として定義されているため、とchar*の間に不一致がwchar_t*ありchar*、コンパイル エラーが発生します。

それを修正するには、いくつかのオプションがあります。

たとえば、コード内で明示的に記述して、CreateFileA()の代わりに呼び出すことができますCreateFile()const char*このようにして、Visual Studio の実際の ANSI/MBCS/Unicode 設定とは別に、関数の ANSI/MBCS バージョン (つまり、 を取るもの) を使用することになります。


もう 1 つのオプションは、現在のビルド設定をデフォルトの Unicode モードから ANSI/MBCS に変更することです。これを行うには、次のパスをたどることができます。

Project Properties | Configuration Properties | General | Character Set

次のスクリーンショットに示すように、 [ Use Multi-Byte Character Set]を選択します。

VS2010 IDE でのマルチバイト文字セットの設定

于 2015-06-12T15:21:56.137 に答える
2

Visual Studio の設定はおそらく Unicode に設定されていますが、コンパイルしているコードは ASCII を想定しています。

[プロジェクト プロパティ] -> [構成プロパティ] -> [一般] -> [文字セット] に移動し、[マルチバイト文字セットを使用] を選択します。

-スレンタール

于 2016-09-07T07:05:27.720 に答える
1

Visual Studio の設定はおそらく Unicode に設定されていますが、コンパイルしているコードは ASCII を想定しています。

[プロジェクト プロパティ] -> [構成プロパティ] -> [一般] -> [文字セット] に移動し、[マルチバイト文字セットを使用] を選択します。

また、C++ -> Preprocessor -> Preprocessor の定義が定義されている場合は、そこからUNICODEorを削除する必要があります。_UNICODE

これにより、コードは、文字列を受け入れる Windows API 関数の ASCII バージョンを呼び出すようになりcharます。

于 2015-06-12T14:33:56.593 に答える