אינך במצב לא מקוון כעת, ממתין לחיבור לאינטרנט

כיצד להמיר מ- System::String * Char * ב- Visual C++

חשוב: מאמר זה תורגם באמצעות תוכנת תרגום מכונה של Microsoft וייתכן שנערך לאחר מכן על-ידי קהילת Microsoftבאמצעות טכנולוגייתCommunity Translation Framework (CTF) או באמצעות תרגום אנושי. Microsoft מציעה לך גם מאמרים בתרגום אנושי, מאמרים בתרגום מכונה ומאמרים שנערכו על ידי הקהילה כדי לאפשר גישה למאמרים הקיימים במאגר הידע (Knowledge Base) שלMicrosoft בשפות שונות. מאמרים מתורגמים יכולים להכיל שגיאות באוצר המילים, בתחביר או בדקדוק. Microsoft אינה אחראית לחוסר דיוק, שגיאות או נזקים שייגרמו כתוצאה מטעויות בתכנים או משימוש בתכנים על ידי לקוחותיה.

כותרת מאמר זה באנגלית: 311259
מאמר זה מתייחס הבאות מרחבי שמות של ספריית המחלקות של .NET Framework של Microsoft:
  • System::Runtime::InteropServices
  • Msclr::interop
תקציר
מאמר זה מתאר מספר דרכים כדי להמיר מ- System::String * char * באמצעות הפעולות הבאות:
  • לנהל הרחבות עבור C++ ב- Microsoft Visual C++ .NET 2002 וב -Microsoft Visual C++ .NET 2003
  • C + + / CLI ב- Microsoft Visual C++ 2005 ו- Microsoft Visual C++ 2008

שיטה 1

PtrToStringChars מעניק לך המצביע הפנימי של האובייקט מחרוזת בפועל. אם אתה להעביר זה מצביע לפונקציה לא מנוהל, עליך תחילה להצמיד את המצביע כדי להבטיח את האובייקט אינו זז במהלך פסולת אסינכרוני תהליך איסוף:
//#include <vcclr.h>System::String * str = S"Hello world\n";const __wchar_t __pin * str1 = PtrToStringChars(str);wprintf(str1);					

שיטה 2

StringToHGlobalAnsi מעתיקה את התוכן של אובייקט מחרוזת מנוהל לתוך ערימה מקורי ולאחר מכן ממירה אותו לתוך הלאומי מכון התקנים ארה (ANSI) לעצב ובוודאי. שיטה זו מקצה את הזיכרון הנדרש ערימה מקורי:
//using namespace System::Runtime::InteropServices;System::String * str = S"Hello world\n";char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);printf(str2);Marshal::FreeHGlobal(str2);				
הערה ב- Visual C++ 2005 ו- Visual C++ 2008, עליך להוסיף זמן הריצה של השפה נפוצות האפשרות מהדר תמיכה (/ clr:oldSyntax) לבצע בהצלחה הידור הקוד לדוגמה הקודמת.כדי להוסיף את זמן הריצה של השפה נפוצות האפשרות מהדר תמיכה, בצע את הפעולות הבאות:
  1. לחץ פרוייקט, ולאחר מכן לחץ על ProjectName מאפיינים.

    הערהProjectName הוא מציין מיקום עבור השם של הפרוייקט.
  2. הרחב מאפייני תצורה, ולאחר מכן לחץ על כללי.
  3. בחלונית השמאלית, לחץ על כדי לבחור תמיכת זמן ריצה נפוצות של שפה, תחביר הישן (/ clr:oldSyntax) ב- תמיכת זמן ריצה של השפה נפוצות הגדרות פרוייקט.
  4. לחץ החל, ולאחר מכן לחץ על אישור.
לקבלת מידע נוסף אודות אפשרויות מהדר התמיכה של זמן הריצה של השפה הנפוצות, בקר באתר האינטרנט הבא של Microsoft מפתח רשת (MSDN):שלבים אלה חלים על מאמר שלם.

שיטה 3

המחלקה VC7 CString יש בנאי שיוביל מצביע מחרוזת מנוהל ו טוען את CString עם התוכן שלה:
//#include <atlstr.h>System::String * str = S"Hello world\n";CString str3(str); printf(str3);				

שיטה 4

Visual C++ 2008 מציג marshal_as<T> </T> לסדר עזרה class ומחלקה מסייעת של סידור marshal_context() .
//#include <msclr/marshal.h>//using namespace msclr::interop;marshal_context ^ context = gcnew marshal_context();const char* str4 = context->marshal_as<const char*>(str);puts(str4);delete context;
הערה קוד זה הידור לא באמצעות הרחבות מנוהלים עבור C++ ב- Visual C++ .NET 2002 או ב- Visual C++ .NET 2003. היא משתמשת את חדש C + + / תחביר CLI שהוצגה ב- Visual C++ 2005 ו קוד השמות msclr החדשה שהוצגה ב- Visaul C++ 2008. לבצע בהצלחה הידור קוד זה, עליך להשתמש בבורר מהדר /clr C++ ב- Microsoft Visual C++ 2008.

לנהל הרחבות עבור קוד לדוגמה C++ (Visual C++ 2002 או ב- Visual C++ 2003)

//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); 	wprintf(str3);    return 0;}				

C + + / קוד לדוגמה CLI (Visual C++ 2005 ו- Visual C++ 2008)

//compiler option: cl /clr #include <atlstr.h>#include <stdio.h>#using <mscorlib.dll>using namespace System;using namespace System::Runtime::InteropServices;#if _MSC_VER > 1499 // Visual C++ 2008 only#include <msclr/marshal.h>using namespace msclr::interop;#endif int _tmain(void){		     System::String ^ str = "Hello world\n";	     /method 1	     pin_ptr<const wchar_t> str1 = PtrToStringChars(str);     	wprintf(str1);		     //method 2	     char* str2 = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();     	printf(str2);	     Marshal::FreeHGlobal((IntPtr)str2);	     //method 3	     CString str3(str); 	     wprintf(str3);     	//method 4#if _MSC_VER > 1499 // Visual C++ 2008 only	     marshal_context ^ context = gcnew marshal_context();	     const char* str4 = context->marshal_as<const char*>(str);     	puts(str4);	     delete context;#endif	return 0;}
מידע נוסף
עבור אחרים hit העליון Visual C++ .NET Microsoft Knowledge Base מאמרים, בקר באתר האינטרנט הבא של Microsoft:
kbVC700

אזהרה: מאמר זה תורגם באופן אוטומטי.

מאפיינים:

מזהה פריט: 311259 - סקירה אחרונה: 06/07/2013 02:24:00 - תיקון: 1.0

Microsoft Visual C++ 2008 Express Edition, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMthe
משוב
/html>