Надеюсь, для 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 , аргумент InputHandle должен быть нулевым указателем, если аргумент HandleType равен SQL_HANDLE_ENV, а в противном случае - ненулевым указателем.
Как мне захватить эту семантику в одной подписи P / Invoke? Пожалуйста, включите пример колл-сайта в ваш ответ. Мое текущее решение - использовать две подписи.