bwells Posted April 6, 2003 Posted April 6, 2003 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*? Quote
*Experts* Nerseus Posted April 7, 2003 *Experts* Posted April 7, 2003 When you declare the DLL function, use a byte[] or char[]. Either can easily be turned into a String in .NET. -Nerseus Quote "I want to stand as close to the edge as I can without going over. Out on the edge you see all the kinds of things you can't see from the center." - Kurt Vonnegut
bwells Posted April 12, 2003 Author Posted April 12, 2003 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 Quote
wyrd Posted April 13, 2003 Posted April 13, 2003 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. Quote Gamer extraordinaire. Programmer wannabe.
igorvodov Posted November 5, 2003 Posted November 5, 2003 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); Quote
bwells Posted November 6, 2003 Author Posted November 6, 2003 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 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.