C# PInvoke错误:尝试写入或读取受保护内存

C# PInvoke错误:尝试写入或读取受保护内存,c#,pinvoke,calling-convention,C#,Pinvoke,Calling Convention,我知道这个问题被问了很多,但我试着改变通话习惯,但没有成功。 我在C++的WiFrices代码中使用了C++ DLL。 在返回语句之前,我的函数一直工作得很好,在返回语句中它给出了这个错误。如果有人能帮助我理解为什么我会非常感激它。 这是我的C++函数的结尾: ans += ";"; ans += rans; cout << "returning value 2" << endl; char* retval = new char[ans.size() + 1]; strc

我知道这个问题被问了很多,但我试着改变通话习惯,但没有成功。 我在C++的WiFrices代码中使用了C++ DLL。 在返回语句之前,我的函数一直工作得很好,在返回语句中它给出了这个错误。如果有人能帮助我理解为什么我会非常感激它。 这是我的C++函数的结尾:

ans += ";";
ans += rans;
cout << "returning value 2" << endl;
char* retval = new char[ans.size() + 1];
strcpy_s(retval,ans.size()+1, ans.c_str());
return retval;
[DllImport("C:\\Users\\Boaz\\source\\repos\\Macro_Setter_DLL\\Debug\\Macro_Setter_DLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern string Stop_Record();

string tmp = Stop_Record();

提前谢谢

错误是什么?封送拆收器试图通过调用CoTaskMemFree来释放字符串。因此,您需要使用CoTaskMemAlloc进行分配。代码中可能存在其他我们看不到的错误@DavidHeffernan解决方案成功了!非常感谢你!!!!