2012-01-16 55 views
0

我正在寫一個項目(一個STM32的HID接口)由visual C++ 2008之前工作過的人工作。所以要模仿導致問題的行,我創建了一個示例winform應用程序在VC++ 2008.下面是這一行的單擊事件,只有當爲x64構建時纔給出構建錯誤,但是win32構建不會給出任何構建錯誤並且工作正常。pin_ptr和interior_ptr在vC++

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 
     } 
}; 

而且僅出現在64位版本所生成錯誤是:

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

感謝。

+0

實際上,我需要將它作爲第一個參數傳遞給CreateFile。而對於32位它的工作,這個問題只發生在64位。感謝您的快速回復。 – Vikyboss 2012-01-16 20:30:14

+2

PtrToStringChars總是返回一個常量wchar_t;你的64位版本是不是編譯成Unicode的? – Joe 2012-01-16 21:14:18

+1

謝謝先生。我已經回答了我的問題。你說得對,我把字符集設置爲unicode。它被設置爲無字符集。多字節字符集也給出相同的錯誤信息。但是Unicode修復了它。再次感謝。 – Vikyboss 2012-01-16 22:04:11

回答

1
  1. 右鍵單擊該項目
  2. 屬性
  3. 配置屬性
  4. 一般
  5. 字符集 「使用Unicode字符集」

這解決了這一問題。

0

「精益求精」 的解決方案可能是:

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

然後用CreateFileW,因爲你有一個Unicode字符串。

這樣,無論項目文件Unicode配置如何,您的代碼都可以工作。

+0

謝謝,我會試試這個。但我想知道這些字符集是幹什麼的?像設置多字節不能在所有計算機上工作?我對這些都很陌生,如果你指出一個方向,我會很感激。謝謝。 – Vikyboss 2012-01-16 22:19:02

+1

@Vikyboss:這不是什麼重要的事情,因爲大多數人都升級了,但Win9x沒有完全的Unicode支持。多字節模式(實際上是單字節,遠東語言除外)可以在所有版本的Windows上運行,Unicode版本通常只在NT上運行:Win2000,XP,Vista,Win7。在Win9x上,'CreateFileW'不可用,所以你實際上必須調用Unicode-> MBCS轉換函數'WideCharToMultiByte'來創建一個可用的文件名。現代版本的Windows可以直接使用Unicode文件名。 – 2012-01-16 22:43:05