希望这不会太难理解,以下是考虑P/Invoke签名的例子:
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
IntPtr InputHandle,
ref IntPtr OutputHandlePtr);
我希望重新设计这个签名,使用SafeHandles,如下所示:
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
MySafeHandle InputHandle,
ref MySafeHandle OutputHandlePtr);
然而,根据MSDN的说明,当HandleType参数为SQL_HANDLE_ENV时,InputHandle参数必须是空指针;否则,InputHandle参数必须是非空指针。
我该如何在一次P/Invoke调用中捕获这些语义?请在您的答案中包含一个示例调用站点。 我目前的解决方案是使用两个签名。
out SafeHandle
参数。 - Anton TykhyySystem.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
收到了一个“ArgumentNullException”异常。 - ordag