2012-01-16 2 views
0

Я работаю над проектом, который был написан (HID inteface для STM32) человеком, который раньше работал на Visual C++ 2008. Поэтому, чтобы подражать строке, вызывающей проблему, я создал образец winform приложение в VC++ 2008. Вот событие click с этой одной строкой, дающее ошибку сборки только при построении для x64, но сборка win32 не дает никакой ошибки построения и работает нормально.pin_ptr и interior_ptr in 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

+2

PtrToStringChars всегда возвращает const wchar_t; ваши 64-битные сборки не компилируются в Unicode? – Joe

+1

Спасибо, сэр. Я ответил на мой вопрос. Вы поняли это правильно, я установил набор символов в unicode. Он был установлен в No Character Set. Также многобайтовый набор символов дал такое же сообщение об ошибке. Но Unicode исправил это. Еще раз спасибо. – Vikyboss

ответ

1
  1. Щелкните правой кнопкой мыши на проекте
  2. Свойства
  3. Свойства
  4. конфигурации
  5. Общие
  6. символьный набор "Характер использования Unicode Set"

Это устранило проблему.

0

"лучше" решение, вероятно:

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

, а затем использовать CreateFileW, потому что у вас есть строка Unicode.

Таким образом, ваш код будет работать независимо от конфигурации Unicode в файле проекта.

+0

Спасибо, я попробую это. Но мне было интересно, что делает этот набор символов? Как настройка Multi-Byte не будет работать на всех компьютерах? Я новичок в этом и буду признателен, если вы укажете направление. Благодарю. – Vikyboss

+1

@Vikyboss: Это еще не так важно, поскольку большинство людей обновилось, но Win9x не имеет полной поддержки Unicode. Многобайтовый режим (который является однобайтным на самом деле, за исключением дальневосточных языков) будет работать на всех версиях Windows, Unicode строит обычно только на NT: Win2000, XP, Vista, Win7. В Win9x 'CreateFileW' недоступен, поэтому вам действительно нужно вызвать функцию преобразования Unicode-> MBCS' WideCharToMultiByte', чтобы создать полезное имя файла. Современные версии Windows могут напрямую использовать имена файлов Unicode. –