dav*_*ngo 8 c# pinvoke dllimport cer
希望这对于SO来说并不是太模糊,但请考虑以下P/Invoke签名:
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
IntPtr InputHandle,
ref IntPtr OutputHandlePtr);
Run Code Online (Sandbox Code Playgroud)
我想重新设计此签名以使用SafeHandles,如下所示:
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
MySafeHandle InputHandle,
ref MySafeHandle OutputHandlePtr);
Run Code Online (Sandbox Code Playgroud)
但是,根据MSDN,当HandleType参数为SQL_HANDLE_ENV时,InputHandle参数必须为空指针,否则为非空指针.
如何在单个P/Invoke签名中捕获这些语义?请在答案中包含示例呼叫站点.我目前的解决方案是使用两个签名.
SafeHandle是一门课程,因此您应该能够通过null而不是实际的SafeHandle. 空引用在 P/Invoke 中被封送为空指针。
SafeHandle handle = new SafeHandle();
OdbcResult result= SQLAllocHandle(OdbcHandleType.SQL_HANDLE_ENV, null, ref handle);
Run Code Online (Sandbox Code Playgroud)