2011-06-19 83 views
0

我想知道如果下面的有效期爲一個託管字符串和一個標準的字符串之間的轉換:託管和非託管代碼之間的轉換

String^mymgdstring; 
std::string mystdstring = *[PTR TO MYMGDSTRING, NOT SURE OF SYNTAX] 

(即創建一個std串等於解除引用指針管理字符串)

如果這是無效的,爲什麼不呢?什麼是在這些之間轉換的最佳方法(即最有效)?
另外,你如何獲得一個指向託管字符串的指針?

+1

重複[這個問題](http://stackoverflow.com/questions/1300718/c-net-convert-systemstring-to-stdstring) – Eugene

+0

@Eugene - 我知道,類似的問題都問到各地和一個快速的谷歌搜索產生的結果,但我的問題是特別想知道我顯示的方法是否有效,什麼是最有效的方法是做轉換(似乎有很多方法在那裏),因爲我正在寫的應用程序艾米正在做這種轉換很多 – JonaGik

+0

「平等」將是困難的,填充utf-16編碼的Unicode字符串掛到8位std ::字符串孔需要一個大錘子。除非你指定你願意忍受什麼樣的損失,否則你的問題是無法回答的。 –

回答

0

C++/CLI附帶一個稱爲MarshalAs的函數,可以執行轉換。

1

複製是必要的,因爲.NET字符串數據可以在垃圾回收期間移動。

您可以假設marshal_as是進行此轉換的最有效方式。如果找到更快的方法,marshal_as將被更新爲使用它(它是一個模板,可以專門)。

您可以使用PtrToStringChars獲得一個內部指針,指向System::String(它將採用Unicode,這是.NET字符串的內部格式)的數據。要將其與本地代碼一起使用,您必須首先使用引腳使用pin_ptr而不是interior_ptr