c# 调用c++写的dll,该如何处理

c# 调用c++写的dll
折腾了好几天。想用c# 调用c++写的dll,先上代码
c++ 里如下
 extern  "C" __declspec(dllexport) int GetString(string*& a)
 { 
 a = new string[1];
 a[0] = "a|aa|aa3aa|";
  
 return 1;
 } 

c# 代码如下:

 
 [DllImport("RenderingPlugin.dll", EntryPoint = "GetString", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
    public static extern int GetString(ref IntPtr a);
    IntPtr a = new IntPtr();

 IntPtr current = new IntPtr(a.ToInt32() + IntPtr.Size);
 string temp;
 temp = Marshal.PtrToStringAnsi(current);
 print(temp);


这里能得到字符串 "a|aa|aa3aa|" ,但是长度有限,太长时,c++里大概超过10个字符时,就得到NULL,满足不了要求。请问如何才能得到长字符串数据,如200个字符长度。
C++ C# String dll

------解决方案--------------------
当然拿不到,要用也得用char*,不能用string作参数
------解决方案--------------------
C#部分还是用顶楼的
C++
extern  "C" __declspec(dllexport) int GetString(char*& a)
 { 
 a = "a
------解决方案--------------------
aa
------解决方案--------------------
aa3aa
------解决方案--------------------
"; 
//或者 a = new char[20]; strcpy(a,"a
------解决方案--------------------
aa
------解决方案--------------------
aa3aa
------解决方案--------------------
");
 return 1;
 } 
C#不懂
字符串大小根据ptr指针指向值去算,遇到asc码0结束
------解决方案--------------------
1\c++中导出时,加上__stdcall
2\直接使用a="a
------解决方案--------------------
aa
------解决方案--------------------
"的形式,不要再new了
3\C#中使用StringBuilder试试