Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Conversion from System::String::^ to char*

196 views
Skip to first unread message

Alejandro Aleman

unread,
Mar 13, 2006, 2:17:35 PM3/13/06
to
Hello!

i know this may be a newbie question, but i need to convert a string from
System::String^ to char*, in the msdn page tells how, but i need to set to
/clr:oldSyntax and i dont want it because in further editions of .net this
will be deprecated or so on.. .

so, please, anybody can tellme how to convert from System::String::^ to
char* and viceversa?

thank you very much!

alejandro aleman


Marcus Heege

unread,
Mar 13, 2006, 2:49:38 PM3/13/06
to
"Alejandro Aleman" <alejandr...@gmail.com> wrote in message
news:%23YJiFLt...@TK2MSFTNGP09.phx.gbl...

To convert from . . to . . use .
[const] char* System::String^ String(char*)
constructor
[const] wchar_t* System::String^ String(wchar_t*)
constructor
BSTR System::String^ String(wchar_t*)
constructor
System::String^ [const] char*
Marshal::StringToCoTaskMemAnsi or Marshal::StringToHGlobalAnsi
System::String^ wchar_t*
Marshal::StringToCoTaskMemUni or Marshal::StringToHGlobalUni
System::String^ const wchar_t*
PtrToStringChars(String^)
System::String^ BSTR
Marshal::StringToBSTR

Marcus Heege


Jochen Kalmbach [MVP]

unread,
Mar 13, 2006, 3:04:51 PM3/13/06
to
Hi Alejandro!

> i know this may be a newbie question, but i need to convert a string from
> System::String^ to char*, in the msdn page tells how, but i need to set to
> /clr:oldSyntax and i dont want it because in further editions of .net this
> will be deprecated or so on.. .
>
> so, please, anybody can tellme how to convert from System::String::^ to
> char* and viceversa?

For convertion char*/wchar_t* into System::String you need just the
"constructor of "System::String".

For the conversion to char*/wchar_t* you need to explicit allocate
memory and therefor I suggest to use the following method.
It seems to be overloaded, but it can handle all situations (like
exceptions and so on...):

<code>
struct StringConvA
{
char *szAnsi;
StringConvA(System::String* s)
:
szAnsi(static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer()))
{}
~StringConvA()
{

System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szAnsi));
}
operator LPCSTR() const
{
return szAnsi;
}
};

struct StringConvW
{
wchar_t *szUnicode;
StringConvW(System::String* s)
:
szUnicode(static_cast<wchar_t*>(System::Runtime::InteropServices::Marshal::StringToHGlobalUni(s).ToPointer()))
{}
~StringConvW()
{

System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(szUnicode));
}
operator LPCWSTR() const
{
return szUnicode;
}
};

#ifdef _UNICODE
#define StringConvT StringConvW
#else
#define StringConvT StringConvA
#endif


int _tmain()
{
String *s = S"abc";
std::string ansi = StringConvA(s);
std::wstring unicode = StringConvW(s);
_tprintf(_T("%s"), (LPCTSTR) StringConvT(s));
}
</code>


--
Greetings
Jochen

My blog about Win32 and .NET
http://blog.kalmbachnet.de/

0 new messages