同事,
前言。我的问题更多关于最佳实践。我知道一种解决方法。这是我第一次在 C# 中处理互操作,同时我用 C 和 C++ 编写了相当多的代码。
我需要调用 2 次非托管 DLL 公开的函数。该函数将指向结构的指针作为参数。第一次我需要传递一个null
指针。第二次我需要传递一个指向结构实例的指针。
该函数有 6 个参数,因此下面是用于此问题的简化声明。(如果有人感兴趣,我可以发布细节。)这是声明的第一个变体:
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(ref NEEDED_STRUCT_TYPE sDataStruct);
我喜欢它,因为它是针对NEEDED_STRUCT_TYPE
. 但是为了能够传递一个空指针,我不得不将声明更改为
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(IntPtr sDataStruct);
现在我可以传递指针IntPtr.Zero
,null
但参数不再是强类型的。在给定的情况下,有没有办法同时拥有:强类型参数和传递空指针的能力?
任何建议,见解或参考都非常感谢!
干杯,
-尼克