うまくいけば、これは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引数はnullポインターである必要があり、それ以外の場合はnull以外のポインターである必要があります。
これらのセマンティクスを単一のP/Invoke署名に取り込むにはどうすればよいですか?回答にコールサイトの例を含めてください。私の現在の解決策は、2つの署名を使用することです。