如何正确处理pinvoke /非托管代码

恩波尔泰利

我有需要修改ac dll的代码,在我看来,此代码应实现idisposible,因为它涉及非托管代码。我可能是错的,因此如果不正确,请纠正我。

阅读这些内容似乎应该使用安全处理。伟大的。除了我的dll不返回任何句柄或intptr。那么现在怎么办?

签名大部分如下:

HRESULT _XYZFN XYZNewTrip (Trip *pTripID); 

参数值:

pTripID:指向4字节整数的指针,新的Trip句柄将放置在该整数中

我能告诉我那里有一个安全把手吗?看来这篇文章可能很难

Xanatos

如果它不返回一个句柄,那么显然您无法释放任何内容,因此该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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确处理pinvoke /非托管代码

来自分类Dev

如何使用ClrMD正确处理非原始ClrInstanceField值?

来自分类常见问题

如何将非托管依赖项导入代码

来自分类Dev

如何将非托管依赖项导入代码

来自分类Dev

EF6-代码优先-如何正确处理从m:n关系中删除父项

来自分类Dev

如何正确处理可能不会传递给客户端代码的InterruptedException?

来自分类Dev

使用流程替换时,如何捕获退出代码/正确处理错误?

来自分类Dev

EF6-代码优先-如何正确处理从m:n关系中删除父项

来自分类Dev

托管代码与非托管代码

来自分类Dev

为什么SQL Server无法正确处理代码?

来自分类Dev

如何正确声明非托管 DLL 函数?

来自分类Dev

如何正确处理httpClient?

来自分类Dev

如何正确处理scanf()

来自分类Dev

如何正确处理并发?

来自分类Dev

如何正确处理导航

来自分类Dev

混合托管和非托管代码问题

来自分类Dev

此函数无法正确处理非 NULL 终止的字符串

来自分类Dev

从Objective C到Swift代码转换,似乎无法在Swift中正确处理字节

来自分类Dev

以表格形式处理非托管资源

来自分类Dev

以表格形式处理非托管资源

来自分类Dev

Flask下的fork如何正确处理?

来自分类Dev

如何正确处理Visual Studio关闭?

来自分类Dev

OCaml:如何正确处理总和类型?

来自分类Dev

如何正确处理请求承诺错误?

来自分类Dev

如何正确处理AsyncTasks的RejectedExecutionException?

来自分类Dev

AngularJS-如何正确处理承诺

来自分类Dev

如何正确处理异步并发请求?

来自分类Dev

如何正确处理SSLSocketImpl死锁?

来自分类Dev

如何正确处理标头中的异常?

Related 相关文章

热门标签

归档