LPVOID не распознается в C ++ / CLI - PullRequest
0 голосов
/ 26 апреля 2010

Я пытаюсь использовать следующий код для преобразования нативной строки в управляемую строку в C ++ \ CLI:

System::String^ NativeToDotNet( const std::string& input )
{
    return System::Runtime::InteropServices::Marshal::PtrToStringAnsi( (static_cast<LPVOID>)( input.c_str() ) );
}

Я изначально нашел код здесь :

Но когда я пытаюсь его собрать, выдает ошибку:

syntax error : identifier 'LPVOID'

Есть идеи, как это исправить?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Это довольно часто встречается в разных ипостасях - самый простой ответ: не пишите свою собственную функцию, смотрите здесь: http://msdn.microsoft.com/en-us/library/bb384865.aspx

1 голос
/ 26 апреля 2010

LPVOID это просто псевдоним для void *. LP означает «длинный указатель», что по старинке означает «указатель машинного размера», 32- или 64-разрядный в зависимости от процесса.

Просто используйте static_cast<void *>

В одном или нескольких заголовочных файлах где-то есть #define LPVOID (void *)

Вы не включили такой файл.

0 голосов
/ 27 апреля 2010

Приведение к (те же cv-qualifiers ) void* всегда неявно возможно, вы никогда не должны видеть, что бросок пытается это сделать. Ошибка при попытке удалить const с static_cast

Попробуйте это, что также правильно обрабатывает встроенные NUL-символы:

using System::Runtime::InteropServices::Marshal::PtrToStringAnsi;
return PtrToStringAnsi( const_cast<char*>(&input[0]), input.size() );

const_cast<char*> заботится о глупости, которая заключается в отсутствии константности в .NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...