具体来说,如果我创建一个具有单个字段的结构体,那么这个结构实质上就是围绕这个值的包装器,可以将这个结构传递给一个预期为底层类型的
P/Invoke方法吗?
我正在使用一个本地库,其API涉及到很多指针到struct类型,我想使用比IntPtr更有类型的东西来保持它们的一致性,通过将IntPtr包装在通用结构体中.会工作吗(已经完成了吗?)
那么不要把它当成一个结构体.
而不是通过P / Invoke直接了解如何直接执行此操作,只需将P / Invoke方法保留为私有,并公开将直接使用包装器类型的公共方法,并处理您需要执行的任何传递方式.然后,您的代码只会使用这些公共方法,而不必担心不安全的结构:)
混合不同的类型,并期待他们神奇地工作是灾难的秘诀.让自己明确,不要依赖隐藏和隐含的强制投降.
最好的事情是,它允许你很容易地使用一些实际上是安全的指针包装器 – 你可以把它作为参考,如果它丢失了,你可以根据需要使用一个终结器去处理非托管资源.看看SafeHandle和它的后代如何为一个伟大的样品工作.