How to: Convert System::String to wchar_t* or char*


はい.Netプラットフォームでc++/clr開発を使用すると、How to:Convert System::String to wchar_t* or char* ?
MSDNのこの文章はあなたの疑問を解消し、転換の道を教えてくれます.(簡単な英語、翻訳はお断り)
You can use PtrToStringChars in Vcclr.h to convert String to native wchar_t * or char *. This always returns a wide Unicode string pointer because CLR strings are internally Unicode. You can then convert from wide as shown in the following example.
Example
//
 convert_string_to_wchar.cpp
//
 compile with: /clr
#include 
<
 stdio.h 
>
#include 
<
 stdlib.h 
>
#include 
<
 vcclr.h 
>
using
 
namespace
 System;
int
 main() {   String 
^
str 
=
 
"
Hello
"
;   
//
 Pin memory so GC can't move it while native function is called
   pin_ptr
<
const
 wchar_t
>
 wch 
=
 PtrToStringChars(str);   printf_s(
"
%S
"
, wch);   
//
 Conversion to char* :   
//
 Can just convert wchar_t* to char* using one of the    
//
 conversion functions such as:    
//
 WideCharToMultiByte()   
//
 wcstombs_s()   
//
 ... etc
   size_t convertedChars 
=
 
0
;   size_t  sizeInBytes 
=
 ((str
->
Length 
+
 
1

*
 
2
);   errno_t err 
=
 
0
;   
char
    
*
ch 
=
 (
char
 
*
)malloc(sizeInBytes);   err 
=
 wcstombs_s(
&
convertedChars,                     ch, sizeInBytes,                    wch, sizeInBytes);   
if
 (err 
!=
 
0
)      printf_s(
"
wcstombs_s  failed!
"
);    printf_s(
"
%s
"
, ch);}
Output:
Hello
Hello