HOW TO:在 Visual C++ .NET 中將 System::String* 轉換為 Char*

文章翻譯 文章翻譯
文章編號: 311259 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,可以利用數種方法,藉由 Visual C++ .NET 中的 Managed Extension 將 System::String* 轉換為 char*。

方法 1

PtrToStringChars 提供您實際 String 物件的內部指標。如果要將這個指標傳送到 Unmanaged 函式呼叫,您必須先將指標固定起來,以確保物件不會在非同步記憶體回收處理期間移動:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);					

方法 2

StringToHGlobalAnsi 會將 Managed String 物件的內容複製到原始堆積中,然後直接轉換為美國國家標準局 (ANSI,American National Standards Institute) 格式。這個方法會配置必要的原始堆積記憶體:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				

方法 3

VC7 CString 類別具有可以取得 Managed String 指標並將 CString 和內容一起載入的建構函式:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

完整的範例程式碼

//compiler option: cl /clr  
#include <vcclr.h>
#include <atlstr.h>
#include <stdio.h>
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

int _tmain(void)
{
   	System::String * str = S"Hello world\n";

	//method 1
	const __wchar_t __pin * str1 = PtrToStringChars(str);
	wprintf(str1);		//method 2
	char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
	printf(str2);
	Marshal::FreeHGlobal(str2);

	//method 3
	CString str3(str); 
	printf(str3);

    return 0;
}
				

?考

如需有關 Visual C++ .NET 最常被點閱的「Microsoft 知識庫」文件,請造訪下列 Microsoft 網站:
Visual C++ .NET (2002) 線上自我幫助中心
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-US%3Bvcnet
如需有關 Visual C++ .NET 的一般相關資訊,請造訪下列 Microsoft Usenet 新聞群組:
Microsoft.public.dotnet.languages.vc

屬性

文章編號: 311259 - 上次校閱: 2004年9月20日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
關鍵字:?
kbhowto kbhowtomaster kbnewsgrouplink kbmanaged KB311259
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com