在C ++ / CLI中无法识别LPVOID

时间:2010-04-26 18:55:55

标签: c++-cli

我正在尝试使用以下代码将本机字符串转换为C ++ \ CLI中的托管字符串:

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

我最初找到了代码here

但是当我尝试构建它时会抛出错误:

syntax error : identifier 'LPVOID'

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

这种情况常常以各种形式出现 - 最简单的答案是:不要编写自己的函数,请看这里: http://msdn.microsoft.com/en-us/library/bb384865.aspx

答案 1 :(得分:1)

LPVOID只是void *的别名。 LP代表“长指针”,这是一种老式的说法“机器大小的指针”,32或64位,具体取决于过程。

只需使用 static_cast<void *>

在某个地方的一个或多个头文件中,有一个 #define LPVOID (void *)

您尚未加入此类文件。

答案 2 :(得分:0)

投射到(相同的 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中缺乏const-correctness