Domanda

Sto lavorando a un progetto che è stato scritto (un numero di nascosto per STM32) da una persona che ha lavorato prima in Visual C ++ 2008. Quindi per imitare la linea che sta causando un problema, ho creato un'applicazione WinForm di esempio in VC ++ 2008. Ecco il qui Fai clic sull'evento con questa riga che fornisce un errore di build solo quando è stata costruita per X64, ma una build Win32 non fornisce alcun errore di costruzione e funziona bene.

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

e l'errore di build che appare solo per la build x64 è:

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

Grazie.

È stato utile?

Soluzione

  1. Fare clic con il tasto destro sul progetto
  2. Proprietà
  3. Proprietà di configurazione
  4. Generale
  5. Set di caratteri "Usa un set di caratteri unicode"

Ciò ha risolto il problema.

Altri suggerimenti

La soluzione "migliore" è probabilmente:

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

e poi usa CreateFileW, perché hai una stringa Unicode.

In questo modo il tuo codice funzionerà indipendentemente dalla configurazione Unicode del progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top