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?

Foi útil?

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.

Ver Como projetar hierarquias de exceção.

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top