2012-01-16 18 views
0

Visual C++ 2008で以前に作業した人が作成したプロジェクト(STM32のHIDインターフェイス)に取り組んでいます。問題の原因となっている行を模倣するために、サンプルのwinformを作成しましたVC++ 2008のアプリケーションです。この1行のクリックイベントは、x64用にビルドエラーが発生した場合にのみ表示されますが、win32ビルドではビルドエラーが発生せず正常に動作します。vC++のpin_ptrとinterior_ptr

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
      String^ devPath = this->textBox1->Text; 
      MessageBox::Show(devPath); 
      pin_ptr<const TCHAR> pPath = PtrToStringChars(devPath); *error line 
     } 
}; 

のみのx64ビルドで表示されるビルドエラーは次のとおりです。

Error 1 error C2440: 'initializing' : cannot convert from 'cli::interior_ptr<Type>' to 'cli::pin_ptr<Type>' 

感謝。

+0

実際には、最初のパラメータとしてCreateFileに渡す必要はありません。そして、それが働いた32ビットのために、問題は64ビットでしか起こらない。早速のお返事ありがとうございます。 – Vikyboss

+2

PtrToStringCharsは常にconst wchar_tを返します。あなたの64ビットビルドはUnicodeにコンパイルされていませんか? – Joe

+1

ありがとうございます。私は私の質問に答えました。あなたはそれが正しいと思う、私はユニコードに文字セットを設定します。 No Character Setに設定されました。また、マルチバイト文字セットでも同じエラーメッセージが表示されました。しかし、Unicodeはそれを修正しました。再度、感謝します。 – Vikyboss

答えて

1
  1. プロジェクトを右
  2. プロパティ
  3. をクリックして構成プロパティ
  4. 一般
  5. のキャラクタ・セット "を使用するUnicode文字セット"

は、この問題を修正。

0

"より良い" 解決策は、おそらく次のとおりです。その後、

pin_ptr<const WCHAR> pPath = PtrToStringChars(devPath); 

、あなたがUnicode文字列を持っているので、CreateFileWを使用しています。

あなたのコードは、プロジェクトファイルのUnicode設定に関係なく動作します。

+0

ありがとう、私はこれを試してみます。しかし、私はこれらのキャラクターセットが何をしているのだろうかと思いましたマルチバイトの設定はすべてのコンピュータで機能しませんか?私はこれらのことを初めて知り、あなたが方向を指していれば感謝します。ありがとう。 – Vikyboss

+1

@Vikyboss:ほとんどの人がアップグレードされているので、もう重要ではありませんが、Win9xには完全なUnicodeサポートがありません。多バイトモード(実際には1バイトの極東言語を除く)は、すべてのバージョンのWindows上で実行されます。通常、UnicodeはWin2000、XP、Vista、Win7のNTでのみ構築されます。 Win9xでは、 'CreateFileW'は利用できませんので、実際にUnicode-> MBCS変換関数' WideCharToMultiByte'を呼び出して使用可能なファイル名にする必要があります。現代版のWindowsでは、Unicodeファイル名を直接使用できます。 –