MFC and .NET Explorations

21 November 2006

Marshal a string from managed to unmanaged

I need to pass a string from C++/CLI managed to C++ unmanaged code.
The unmanaged function takes a LPCTSTR as parameter and I want to pass a String^. How do I do that?

The answer here:
http://msdn2.microsoft.com/en-gb/library/ms235282(VS.80).aspx

And a function to do it easily:

    LPCTSTR MarshalString(String^ managedString)
    {
        return (LPCTSTR)Marshal::StringToHGlobalUni (managedString).ToPointer();
    }
 

and back:


    String^  DiagramContainer::MarshalString(LPCTSTR nativeString)
    {
        return Marshal::PtrToStringAuto(IntPtr((void *)nativeString));
    }