2010-04-26 65 views
0

我嘗試使用下面的代碼到本地字符串轉換爲在C託管字符串++ \ CLI:LPVOID用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' 

任何想法如何解決這個問題?

回答

1

LPVOID只是void *的別名。 LP代表「長指針」,這是一種舊式的「機器大小的指針」方式,取決於過程32位或64位。

只需使用 static_cast<void *>

在一個或多個頭文件的某處,有一個 #define LPVOID (void *)

您還沒有這樣的文件。

+0

這讓犯錯或者:'static_cast':無法從'const char *'轉換爲'void *' – 2010-04-26 19:08:27

+0

@Adam:...這是非常合理的。任何時候你有一個'void *',你都可以期望把它轉換成其他類型的指針來做任何有用的指針。 – 2010-04-26 19:23:49

+0

不,它將input.c_str()的輸出轉換爲void * ... – 2010-04-26 19:27:18

0

鑄造到(相同cv-qualifiersvoid*總是隱含可能的,你永遠不應該看到一個演員試圖這樣做。錯誤是試圖刪除conststatic_cast

試試這個,這也是正確處理內嵌的NULL字符:

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

const_cast<char*>需要是缺乏常量,正確性愚蠢的照顧。 NET