O FCL já tem uma exceção que significa a execução do método?
Pergunta
Eu tenho minha própria exceção, que está jogando Falha na execução de um método (P/Invoke no meu caso).
public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }
Mas quero substituí -lo por já existente. Existe em FCL algo assim?
Solução
O seu chamador tomará ações diferentes com base em lançar uma pinvokeException vs. uma InvalidoPerationException? Nesse caso, crie uma pinvokeException personalizada. Caso contrário, use o invalidoperationException e uma mensagem de erro clara.
Outras dicas
Não há nada que se dedique a chamadas Pinvoke no BCL. O mais próximo que existe é o marshal.Getexceptionforhr e o marshal.GETHRFORLASTWIN32Error. Você pode usar a combinação dessas duas funções para lançar a exceção apropriada sempre que uma chamada pinvoke falhar.
Ex:
throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
Há um: Win32Exception.
Se o método que você está lançando uma exceção é um método .NET você deve estar usando uma exceção personalizada (ou existente, dependendo do que aconteceu).
Se você chamar um método em nome da pessoa que chama seu método (ou algo a ver com reflexão - mas o Methodinfo.invoke o faz de qualquer maneira), por exemplo:
public void DoIt(Action action) { action(); }
Você deve usar o TargetInvocationException exceção.
Se você não conseguir lidar com a exceção, retire -o ou ignore -o.
Que tal System.Runtime.InteropServices.ExternalException
?