我有一个包含托管/非托管代码的项目。
托管代码:C#---处理业务逻辑
托管代码:C++——作为 C# 和 C(非托管代码)之间的适配器
非托管代码:c/c++---处理编码/解码逻辑
所以有很多[元帅操作],我的代码如下:
void fun(ManagedObject^ managedObj)
{
marshal_contex^ context = gcnew marshal_context();
const char* str = context->marshal_as<const char*>(managedObj->stringField);
//then call the c function,pass the str param to it
c_fun((u_char *)str);
}
ps:当我启用fullpageheap验证时,c_fun
会抛出一个Violate read exception
,然后我检查转储文件,“str”指向一个无效的地址。
我不知道为什么?是fullpageheap的问题吗?或者元帅对象被移动了,但是被谁移动了?