0

我有一个包含托管/非托管代码的项目。

托管代码: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的问题吗?或者元帅对象被移动了,但是被谁移动了?

4

0 回答 0