我有需要pinvoke c dll的代码,在我看来,这个代码应该实现idisposible,因为它触及非托管代码。我可能是错的,如果不是这样,请纠正我。
阅读这些东西似乎我应该使用安全手柄。大。除了我的DLL没有返回任何句柄,或intptr。那么现在怎么办?
签名大致如下:
HRESULT _XYZFN XYZNewTrip (Trip *pTripID);
参数值:
pTripID:指向新的Trip句柄所在的4字节整数的指针 放置
我可以在那里找到一个安全的鞋帮吗?看起来这可能是article的难题。
答案 0 :(得分:3)
如果它没有返回一个句柄,那么显然你不能释放任何东西,所以IDisposable
模式将是无用的。
唯一的事:
pTripID: pointer to a 4 byte integer in which the new Trip handle will be placed
这些pTripID
你将如何解除分配?可能有一个
void XYZFreeTrip(Trip tripID);
在这种情况下,您必须收集所有tripID
,并在IDisposable
中释放它们。
现在,如果Trip
是句柄,那么您有两个选择:
您的代码仅为x86(因为例如PInvoke DLL仅为x86):sizeof(int) == sizeof(int*) == IntPtr.Size
,因此您可以使用包装非托管资源 - 为指针定义0级类型(中级)情况下)
您的代码是x86和x64:包装非托管资源 - 为非指针数据定义0级类型(硬案例) :-((而不是ushort
你有一个int
)