Надеюсь, это не слишком непонятно для 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? Пожалуйста, включите пример call-site в свой ответ. Мое текущее решение - использовать две подписи.