Pasar cadena de C # a DLL de C ++ no administrado

Tengo una aplicación simple que carga un dll no administrado y le pasa algunos valores de cadena desde C #. Pero en la aplicación dll C ++, recibo una excepción :: Intenté acceder a una memoria protegida de lectura / escritura. Mi importación de DLL se ve así:

[DllImport("X.dll", CallingConvention = CallingConvention.Cdecl) ]
public static extern int
DumpToDBLogFile([MarshalAs(UnmanagedType.I4)]int loggingLevel,
                [MarshalAs(UnmanagedType.I4)]int jobId,
                int threadId,
                [MarshalAs(UnmanagedType.LPStr)]string procName,
                [MarshalAs(UnmanagedType.LPStr)]string message);

y la Declaración de C ++ es como

extern "C"    
__declspec(dllexport) int DumpToDBLogFile( int loggingLevel, int jobId, int threadId, string procName, string message )
{
    //access strings..
}

¡¡¡Ayuda por favor!!!

Respuestas a la pregunta(2)

Su respuesta a la pregunta