我有一个包含托管/非托管代码的项目。
托管代码: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
,然后检查转储文件,&#34; str&#34;指向无效的地址。
我不知道为什么?这是fullpageheap的问题吗?或者Marshal对象被移动,但由谁移动?