c++dll中的char*形参如何通过CLR程序传递给C#?

工程3层结构,底层是c++的dll,接口如下:
CPPDLL_API int fnCppDll(char* p)
{
for (int i = 0;i < 10;i++)
{
*p++ = '0' + i;
}
return 1;
}
中间层是CLR的dll,接口如下:
int MgdDll::Class1::getStr(String^ str)
{
interior_ptr p = const_cast>(PtrToStringChars(str));

fnCppDll(p);
return 0;
}

上层是C# From调用,string str;int rc = 1;rc = cs1.getStr(str);MessageBox.Show(str);

CLR中间层编译错误:MgdDll.cpp(17): error C2664: “fnCppDll”: 不能将参数 1 从“cli::interior_ptr”转换为“char *” 无法将托管类型转换为非托管类型。

请问如何把C#层的str传递到c++层并返回修改后的串?不用说用DllImport直接导入c++的dll,架构设计需要使用3层结构。谢谢

char * 在.net 中就是字节数组 byte[]