Hy vọng rằng đây không phải là quá khó hiểu cho SO, nhưng xem xét P sau/Gọi chữ ký:Làm thế nào một SafeHandle có thể được sử dụng trong một chữ ký P/Invoke yêu cầu một con trỏ null trong một số trường hợp?
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
IntPtr InputHandle,
ref IntPtr OutputHandlePtr);
Tôi muốn thiết kế lại chữ ký này để sử dụng SafeHandles, như sau:
[DllImport("odbc32.dll", CharSet = CharSet.Unicode)]
internal static extern OdbcResult SQLAllocHandle(
OdbcHandleType HandleType,
MySafeHandle InputHandle,
ref MySafeHandle OutputHandlePtr);
Tuy nhiên, according to MSDN, đối số InputHandle phải là một con trỏ rỗng khi đối số HandleType là SQL_HANDLE_ENV và một con trỏ không null khác.
Làm cách nào để nắm bắt các ngữ nghĩa đó trong một chữ ký P/Invoke? Vui lòng bao gồm ví dụ trang web trong câu trả lời của bạn. Giải pháp hiện tại của tôi là sử dụng hai chữ ký.
Cũng có thể khai báo tham số 'out SafeHandle'. –
Không hoạt động ở đây, tôi nhận được 'ArgumentNullException' từ' System.StubHelpers.StubHelpers.SafeHandleAddRef (SafeHandle pHandle, Boolean & success) '. – ordag
Có, @ shf301, điều này không hoạt động trong P/Gọi điện. Bạn có thử nó không? – jnm2