我正在尝试使用以下代码将本机字符串转换为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'
知道如何解决这个问题吗?
答案 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