将托管类中包含的非托管指针字段传递给非托管代码

Posted

技术标签:

【中文标题】将托管类中包含的非托管指针字段传递给非托管代码【英文标题】:passing unmanaged pointer field contained in managed class to unmanaged code 【发布时间】:2010-07-03 07:45:32 【问题描述】:

我有一个包含非托管类指针的托管类:

class Managed  public IntPtr ptr; ;

以指针为参数的c++函数:

void foo(void *ptr);

我应该在调用非托管函数之前固定这个托管对象吗?

调用代码:

Managed obj = new Managed;
foo(obj.ptr);

【问题讨论】:

【参考方案1】:

我不明白你为什么需要固定它 - 即使 GC 移动 obj 本身,obj.ptr 的值也不应该受到影响 - 并且 obj.ptr 被传递给你的 C++ 代码值,所以它不像C++代码可以尝试改变obj的内容。

【讨论】:

以上是关于将托管类中包含的非托管指针字段传递给非托管代码的主要内容,如果未能解决你的问题,请参考以下文章

通过引用从 c# 将 char** 传递给非托管 C++

WinForm 在创建之后才收到消息

将多维数组从托管代码传递到非托管代码

在另一个活动托管的片段之间传递数据的最佳实践

如何防止相同的非托管指针被封装在两个不同的 SafeHandles 中?

将指针从非托管代码返回到托管代码