pin_ptr e interior_ptr in vc ++
-
29-10-2019 - |
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.
Soluzione
- Fare clic con il tasto destro sul progetto
- Proprietà
- Proprietà di configurazione
- Generale
- 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.