我需要将非托管的dll导入到我的C#应用程序中,我想知道IntPtr和ref之间的区别,你推荐我使用哪种,并解释原因?请注意,这两种方法对我都有效。
[DllImport("mydll.dll", CallingConvention=CallingConvention.Cdecl)]
static extern Result Init(IntPtr versionInfo);
[DllImport("mydll.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Init(ref Version versionInfo);
ref Version
则不允许。因此,根据本机代码所需的内容,需要IntPtr重载并不罕见。 - jonpVersion
时就可以通过引用传递它,而当你想要传递null时就可以传递IntPtr.Zero
。或者将Version
改为类而不是结构体,这样就可以传递null了(不再需要使用ref
关键字,但在类上需要使用P/Invoke注解属性)。 - Ben Voigt