char* to string

bwells

Regular
Joined
Feb 25, 2003
Messages
84
I have a C++ library (with managed extensions). A function returns a char*. I want to call this function from C#. How can I access the char*?
 
When I try writing a C++ function my unmanaged C++ class which returns a char[], I get a compiler error C3409 empty attribute block is not allowed. Am I doing something wrong?

thanks
Bryan
 
Probably because it thinks you're trying to return an array. Your char* was fine.

I believe Nerseus was talking about using char[] in your .NET code when you declare the DLL function, not the C++ code.
 
Marshaling return value

I also have a C++ library (without managed extensions). A function returns a char*. I want to call this function from C#. How can I access the char*?
I tried to use byte[] or char[] but I am having a problem because
as soon as I call my C++ function, I get an exception thrown with a message "Cannot marshal return value".
Here is the code that calls C++ function
byte[] charAr = new byte[41];
charAr = Region.RegionMgr_GetStateAbbrev(80);
 
one option

this is the code to convert the other way.

fname is a managed type String. ufname is an unmnaged char*.

void* pfname = Marshal::StringToHGlobalAnsi(fname).ToPointer( );
char* ufname = (char*)pfname;
Marshal::FreeHGlobal((int)ufname);

I see in the Marshal class, there is a method

Marshal.PtrToStringUni Method

which copies an unmanaged Unicode string to a managed String object.

and

Marshal.PtrToStringAnsi Method

Perhaps you can figure out what to do from there.

Bryan
 
Back
Top