【发布时间】:2011-09-19 11:18:34
【问题描述】:
我有一个托管程序,它与非托管 DLL 库配合使用。
Library 构造一个对象,该对象要求(通过转换为委托的回调函数)托管主机填充非托管数组。数组本身通过指针 (IntPtr) 以及有关其大小的信息传递。这种类型是双方都知道的。关键是,如何安全地用托管代码中的数据填充非托管数组?有两个限制:没有不安全的代码,最好没有创建额外的数组。如果存在,则数组可能会以另一种方式传递。
让回调有如下原型:
typedef void (__stdcall * FillData)(double * array, int count);
让委托有以下原型:
protected delegate void FillData(IntPtr array, int count);
【问题讨论】:
-
可以分享callback的签名吗?
-
按要求添加回调签名。
-
什么是 PInvoke 等价物;你用的是什么?
标签: c# .net arrays managed unmanaged-memory