أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تحويل من system:: string * إلى Char * في Visual c + +

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية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

الطريقة الأولى

يمنحك PtrToStringChars مؤشر داخلي لكائن سلسلة الفعلي. إذا كنت تمرير هذا المؤشر إلى استدعاء دالة غير مدارة، يجب أولاً تثبيت المؤشر للتأكد من أن الكائن لا تتحرك أثناء البيانات مهملة غير متزامن عملية جمع:
//#include <vcclr.h>System::String * str = S"Hello world\n";const __wchar_t __pin * str1 = PtrToStringChars(str);wprintf(str1);					

الطريقة الثانية

سترينجتوهجلوبالانسي بنسخ محتويات كائن سلسلة مدار كومة الذاكرة المؤقتة الأصلية، ومن ثم تحويل إلى الأمريكية الوطنية مقاييس المعهد (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 و 2008 Visual c + +، يجب إضافة الشائعة لغة وقت التشغيل دعم برنامج التحويل البرمجي الخيار (/clr: oldsyntax) ترجمة نموذج التعليمات البرمجية السابق بنجاح.لإضافة الشائعة لغة وقت التشغيل دعم برنامج التحويل البرمجي الخيار، اتبع الخطوات التالية:
  1. انقر فوق المشروع، ثم انقر فوق اسم المشروع خصائص.

    ملاحظةاسم المشروع عنصرا نائبا لاسم المشروع.
  2. قم بتوسيع خصائص التكوين، ثم انقر فوق عام.
  3. في الجزء الأيسر، انقر لتحديد دعم وقت تشغيل اللغة العامة, بناء الجملة القديمة (/clr: oldsyntax) في دعم "وقت تشغيل اللغة" العامة إعدادات المشروع.
  4. انقر فوق تطبيق، ثم انقر فوق موافق.
لمزيد من المعلومات حول خيارات برنامج التحويل البرمجي دعم وقت تشغيل اللغة العامة، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:تطبيق هذه الخطوات لكل مادة.

الطريقة الثالثة

الفئة VC7 CString تحتوي على دالة إنشائية تأخذ مؤشر سلسلة مدارة و تحميل CString بمحتوياته:
//#include <atlstr.h>System::String * str = S"Hello world\n";CString str3(str); printf(str3);				

الطريقة الرابعة

يقدم visual c + + 2008 marshal_as<T> </T> تنظيم تعليمات فئة وفئه مساعد تنظيم وإرسال 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 والتعليمات البرمجية مساحة الاسم مسكلر الجديدة التي تم تقديمها في 2008 c + + فيساول. لترجمة هذه التعليمة البرمجية بنجاح، يجب استخدام رمز التبديل برنامج التحويل البرمجي /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 2005 c + + و 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;}
مراجع
لأخرى أعلى ضربها Visual c + +.NET قاعدة المعارف ل Microsoft مقالات، قم بزيارة موقع Microsoft التالي على الويب:
kbVC700

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 311259 - آخر مراجعة: 05/29/2013 23:41:00 - المراجعة: 6.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 KbMtar
تعليقات
t=">