By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,645 Members | 1,078 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,645 IT Pros & Developers. It's quick & easy.

Convert System::String* to char*

P: n/a
Hi

Does anybody know how to convert System::String* to char*? I searched the System::String class members and did not find any. Thanks

Yifan
Nov 17 '05 #1
Share this Question
Share on Google+
15 Replies


P: n/a
"Yifan" <an*******@discussions.microsoft.com> wrote in message
news:EA**********************************@microsof t.com...
Does anybody know how to convert System::String*
to char*? I searched the System::String class
members and did not find any.


Check the docs for the meaning of PtrToStringChars()

Regards,
Will
Nov 17 '05 #2

P: n/a
PtrToStringChars() returns System::Char*. But I want to convert System::String* to char* which is a c-type string such as "hello". Thanks

Yifa

----- William DePalo [MVP VC++] wrote: ----

"Yifan" <an*******@discussions.microsoft.com> wrote in messag
news:EA**********************************@microsof t.com..
Does anybody know how to convert System::String
to char*? I searched the System::String clas
members and did not find any


Check the docs for the meaning of PtrToStringChars(

Regards
Wil

Nov 17 '05 #3

P: n/a
"Yifan" <an*******@discussions.microsoft.com> wrote in message
news:1D**********************************@microsof t.com...
PtrToStringChars() returns System::Char*. But
I want to convert System::String* to char* which
is a c-type string such as "hello".


See Win32's WideCharacterToMultiByte() or the runtime's wcstombs().

Also check the docs for the DllImport attribute and its CharSet member which
can be used to "tag" functions in external DLLs that you wish to call.

Regards,
Will
Nov 17 '05 #4

P: n/a

size_t wcstombs
char *mbstr
const wchar_t *wcstr
size_t count
)

wcstombs() only converts wchar_t * to char*

What I really want is to convert System::String* to char*(c-type string)
I can use System::String's ToCharArray() to convert System::String* to a Unicode character array, but it is of type __wchar_t [], and I could not convert __wchar_t [] to wchar_t * or char*, even with a Type-cast. Thanks

Yifa

----- William DePalo [MVP VC++] wrote: ----

"Yifan" <an*******@discussions.microsoft.com> wrote in messag
news:1D**********************************@microsof t.com..
PtrToStringChars() returns System::Char*. Bu
I want to convert System::String* to char* whic
is a c-type string such as "hello"


See Win32's WideCharacterToMultiByte() or the runtime's wcstombs()

Also check the docs for the DllImport attribute and its CharSet member whic
can be used to "tag" functions in external DLLs that you wish to call

Regards
Wil

Nov 17 '05 #5

P: n/a
"Yifan" <an*******@discussions.microsoft.com> wrote in message
news:A4**********************************@microsof t.com...
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);

wcstombs() only converts wchar_t * to char*.


Yes, I know. A wchar_t is a 16 bit-wide character type. System::Char are
16-bit wide characters as well. The two functions I referenced will map the
string you get back from PtrToStringChars() to ANSI.

I pointed you to DllImport. You should look it up. One the page where it is
described:

http://msdn.microsoft.com/library/de...mberstopic.asp

there is also mention of "CharSet" which addresses the ANSI/UNICODE issue.

If neither of these two approaches will solve your problem then I am afraid
I can't help you.

Regards,
Will
Nov 17 '05 #6

P: n/a
Yifan wrote:
Hi,

Does anybody know how to convert System::String* to char*? I searched
the System::String class members and did not find any. Thanks.


Try these two functions for converting a System::String * to a std::string
and back again:

std::string ToCppString(System::String * str)
{
if (str == 0)
{
return(std::string());
}
System::IntPtr
ptr(System::Runtime::InteropServices::Marshal::Str ingToHGlobalAnsi(str));
std::string ret(static_cast<const char *>(static_cast<void *>(ptr)));
System::Runtime::InteropServices::Marshal::FreeCoT askMem(ptr);
return(ret);
}

System::String * ToNetString(const std::string & ss)
{
if (ss.empty())
{
return(new System::String(S""));
}
System::IntPtr ptr(static_cast<System::IntPtr>(static_cast<void
*>(const_cast<char *>(ss.c_str()))));
System::String *
ret(System::Runtime::InteropServices::Marshal::Ptr ToStringAnsi(ptr));
return(ret);
}

I put these in a __nogc class in a namespace in a shared assembly and both
are static functions. I then export the class when creating the assembly and
import the class when using the assembly, using a macro which becomes either
__declspec(dllexport) when the assembly is being built and
__declspec(dllimport) otherwise. Since it is a __nogc class, you need to
#include the header file in which the static functions and their __nogc
class are defined. Then to convert from a System::String * to a std::string
or vice-versa, I use the full name, such as:
MyNamespace::MyClass::ToCppString(x) or
MyNamespace::MyClass::ToNetString(y)..
Nov 17 '05 #7

P: n/a

"Yifan" <an*******@discussions.microsoft.com> wrote in message
news:EA**********************************@microsof t.com...
Hi,

Does anybody know how to convert System::String* to char*? I searched the System::String class members and did not find any. Thanks.
Yifan


Personally I use good old CString :

System::String* stest="test";

CString cstest=stest;

char* ctest=cstest.GetBuffer();

HTH,

Michiel.
Nov 17 '05 #8

P: n/a
> Personally I use good old CString :

System::String* stest="test";

CString cstest=stest;

char* ctest=cstest.GetBuffer();


Where is this code located in? In a managed C++ project or an unmanaged
project? Which project wizard did you use and which compile settings did you
add to compile this?

Thanks and regards,
Klaus
Nov 17 '05 #9

P: n/a

"Klaus Bonadt" <Bo****@hotmail.com> wrote in message
news:O8**************@TK2MSFTNGP09.phx.gbl...
Personally I use good old CString :

System::String* stest="test";

CString cstest=stest;

char* ctest=cstest.GetBuffer();

Where is this code located in? In a managed C++ project or an unmanaged
project? Which project wizard did you use and which compile settings did

you add to compile this?

Thanks and regards,
Klaus


It's a mixed project (custom ActiveX control, no project wizard was used (VS
2003)) and I added
#include <atlstr.h> to the includes and also a reference to the .Net System
library.
Nov 17 '05 #10

P: n/a
> > > Personally I use good old CString :

System::String* stest="test";

CString cstest=stest;

char* ctest=cstest.GetBuffer();

Where is this code located in? In a managed C++ project or an unmanaged
project? Which project wizard did you use and which compile settings did

you
add to compile this?

Thanks and regards,
Klaus


It's a mixed project (custom ActiveX control, no project wizard was used

(VS 2003)) and I added
#include <atlstr.h> to the includes and also a reference to the .Net System library.


Is there somebody who can direct me in the right direction? I am using VS
2002 and I have difficulties in using MFC (for example CString) together
with managed code.
If I start with a managed C++ dll, I do not know how to integrate the MFC?
Or should I start with an unmanaged C++ dll? What options I have to give to
access .Net Framework?

Thanks and regards,
Klaus
Nov 17 '05 #11

P: n/a

"Klaus Bonadt" <Bo****@hotmail.com> wrote in message
news:%2****************@TK2MSFTNGP11.phx.gbl...
> Personally I use good old CString :
>
> System::String* stest="test";
>
> CString cstest=stest;
>
> char* ctest=cstest.GetBuffer();
>

Where is this code located in? In a managed C++ project or an unmanaged project? Which project wizard did you use and which compile settings
did you
add to compile this?

Thanks and regards,
Klaus

It's a mixed project (custom ActiveX control, no project wizard was used

(VS
2003)) and I added
#include <atlstr.h> to the includes and also a reference to the .Net

System
library.


Is there somebody who can direct me in the right direction? I am using VS
2002 and I have difficulties in using MFC (for example CString) together
with managed code.
If I start with a managed C++ dll, I do not know how to integrate the MFC?
Or should I start with an unmanaged C++ dll? What options I have to give

to access .Net Framework?

Thanks and regards,
Klaus


Please note that the CString I use is not the MFC one, but the ATL one.
I just tested it by creating a new Windows Forms .Net application, including
the mentioned file and creating and outputting a CString. Works fine. I
figured I'd have to include ATL as a static link, but this wasn't even
necessary.

Hope this helps,

Michiel.
Nov 17 '05 #12

P: n/a
On Mon, 9 Feb 2004 09:16:05 -0800, Yifan wrote:
Hi,

Does anybody know how to convert System::String* to char*? I searched the System::String class members and did not find any. Thanks.

Yifan


Have a look at the methods in the Marshal class. StringToHGlobalAnsi
may do what you need.

HTH,
Tim
--
Tim Smelser - MVP Visual C#
To email me, make the snot hot.
Nov 17 '05 #13

P: n/a
Hi,

I have found this in the msdn

String __gc* str = S"managed string";
const char __nogc* pStr = static_cast<const
char*>(Marshal::StringToHGlobalAnsi(str).ToPointer ());

Default Arguments and Helper Functions
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/vcmxspec/html/vcmg_defaultarg
umenthelpfunctions.htm

Hope this can help

Thanks,
Mohamed

"Yifan" <an*******@discussions.microsoft.com> wrote in message
news:EA**********************************@microsof t.com...
Hi,

Does anybody know how to convert System::String* to char*? I searched the System::String class members and did not find any. Thanks.
Yifan

Nov 17 '05 #14

P: n/a
Michie

yu da man

----- Michiel wrote: ----
"Klaus Bonadt" <Bo****@hotmail.com> wrote in messag
news:%2****************@TK2MSFTNGP11.phx.gbl..
Personally I use good old CString
>>>> System::String* stest="test"
>>>> CString cstest=stest
>>>> char* ctest=cstest.GetBuffer()
>>>>>> Where is this code located in? In a managed C++ project or a unmanage project? Which project wizard did you use and which compile setting
di yo
add to compile this
>> Thanks and regards
Klau
>>> It's a mixed project (custom ActiveX control, no project wizard was use
(V
2003)) and I adde
#include <atlstr.h> to the includes and also a reference to the .Ne

Syste
library
Is there somebody who can direct me in the right direction? I am using V

2002 and I have difficulties in using MFC (for example CString) togethe
with managed code
If I start with a managed C++ dll, I do not know how to integrate the MFC
Or should I start with an unmanaged C++ dll? What options I have to giv

t access .Net Framework
Thanks and regards

Klau

Please note that the CString I use is not the MFC one, but the ATL one
I just tested it by creating a new Windows Forms .Net application, includin
the mentioned file and creating and outputting a CString. Works fine.
figured I'd have to include ATL as a static link, but this wasn't eve
necessary

Hope this helps

Michiel.
Nov 17 '05 #15

P: n/a
Thank you :O

"Alfonso Paredes" <an*******@discussions.microsoft.com> wrote in message
news:1F**********************************@microsof t.com...
Michiel

yu da man!
----- Michiel wrote: -----
"Klaus Bonadt" <Bo****@hotmail.com> wrote in message
news:%2****************@TK2MSFTNGP11.phx.gbl...
>>>> Personally I use good old CString :
>>>>>>>> System::String* stest="test";
>>>>>>>> CString cstest=stest;
>>>>>>>> char* ctest=cstest.GetBuffer();
>>>>>>>>>> Where is this code located in? In a managed C++ project or
an
unmanaged >>> project? Which project wizard did you use and which compile
settings
did >> you
>>> add to compile this?
>>>>>> Thanks and regards,
>>> Klaus
>>>>>>> It's a mixed project (custom ActiveX control, no project
wizard was used > (VS
>> 2003)) and I added
>> #include <atlstr.h> to the includes and also a reference to the
..Net > System
>> library.
>>>> Is there somebody who can direct me in the right direction? I am
using VS > 2002 and I have difficulties in using MFC (for example CString) together > with managed code.
> If I start with a managed C++ dll, I do not know how to integrate the MFC? > Or should I start with an unmanaged C++ dll? What options I have to
give to
> access .Net Framework?
>> Thanks and regards, > Klaus
>


Please note that the CString I use is not the MFC one, but the ATL

one. I just tested it by creating a new Windows Forms .Net application, including the mentioned file and creating and outputting a CString. Works fine. I figured I'd have to include ATL as a static link, but this wasn't even necessary.

Hope this helps,

Michiel.

Nov 17 '05 #16

This discussion thread is closed

Replies have been disabled for this discussion.