在托管代码中调用非托管代码时,将移动剂量Marshal obj

时间:2013-10-30 09:37:01

标签: c# c++ .net

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

托管代码: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对象被移动,但由谁移动?

0 个答案:

没有答案