我有需要修改ac dll的代码,在我看来,此代码应实现idisposible,因为它涉及非托管代码。我可能是错的,因此如果不正确,请纠正我。
阅读这些内容似乎应该使用安全处理。伟大的。除了我的dll不返回任何句柄或intptr。那么现在怎么办?
签名大部分如下:
HRESULT _XYZFN XYZNewTrip (Trip *pTripID);
参数值:
pTripID:指向4字节整数的指针,新的Trip句柄将放置在该整数中
我能告诉我那里有一个安全把手吗?看来这篇文章可能很难。
如果它不返回一个句柄,那么显然您无法释放任何内容,因此该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
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句