调用返回(并接受)指向结构的指针的本机DLL函数

时间:2011-03-22 11:29:38

标签: c# dll

我有一个带有一些很好的函数的“本机”DLL,可以返回(并接受)指向数据的指针,这些数据是根据特定的C结构格式化的。

在我的C#程序中,我不关心struct的内部结构,我只是希望得到并将它们传递给本机函数。我已经设法在DLL内部调整函数。 对于指针,我已经想过使用void *(作为“指向未知的指针”),因为我真的不关心指向结构的内部字段,我只需要存储并使用指针传递它到DLL库函数。

但是对于许多不同类型的数据使用void *会使我的代码无法读取!在C#中有什么方法可以使用typedef void * some_nicer_type_t吗?或者做那样的事情?

2 个答案:

答案 0 :(得分:2)

您可以考虑改用IntPtr

来自MSDN

  

使用的特定于平台的类型   表示指针或句柄。

这最终可能会帮助您编写非unsafe代码。

修改

为了满足您对此问题的评论所重申的需求,我可能建议的一件事(虽然不建议这是理想的)是定义structclass本质上是一个包装器在指针周围:

public struct TypedPointer
{
    public IntPtr UnderlyingPointer;
}

当你自己提出时,这可能会导致包装更多代码,以使其全部符合你想要的使用和美学。

答案 1 :(得分:1)

  

IntPtr的

是要走的路 只有你需要注意的区域是内存管理。不安全或不安全 - C#需要一个引用,否则它将迟早被垃圾收集 - 当其中一个外部dll使用它时也可能。因此,您需要确保在C#端根据需要保留对IntPtr的引用。