I would like to know if it's possible to determine in the next method, before calling the last win32 error code, whether the function to be invoked has an DllImportAttribute.SetLastError flag set.
Private Shared Sub SafePInvoke(Of T)(ByRef resultVar As T, ByVal [function] As Func(Of T))
resultVar = [function].Invoke
Dim lastError As Integer = Marshal.GetLastWin32Error
If lastError <> 0 Then
Throw New Win32Exception([error]:=lastError, message:=String.Format("Function '{0}' thrown an unhandled Win32 exception with error code '{1}'.",
[function].Method.ToString, CStr(lastError)))
End If
End Sub
Then for example if I have this definition:
<DllImport("user32.dll", SetLastError:=False)>
Friend Shared Function FunctionName() As Integer
End Function
And I do this:
Dim result As Integer
SafePInvoke(result, Function() FunctionName())
The SafePInvoke method should be able to determine whether the FunctionName has the SetLastError flag set to True or not.
Aucun commentaire:
Enregistrer un commentaire