希望这对 SO 来说不是太晦涩难懂,但请考虑以下 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 参数必须为空指针,否则为非空指针。
如何在单个 P/Invoke 签名中捕获这些语义?请在您的答案中包含一个示例呼叫站点。我目前的解决方案是使用两个签名。