.NET обработка исключений PInvoke

Если Вы действительно идете для создания нескольких проектов, удостоверьтесь все, кто добавляет, что код к решению полностью осведомлен о намерении их, и сделайте все, что Вы можете, чтобы заставить их понимать зависимости между проектами. Если Вы когда-либо пытались разобраться в путанице, когда кто-то пошел и добавил ссылки, которые не должны были быть там и выйти сухим из воды в течение многих недель, Вы поймете эту точку

9
задан Robert MacLean 12 October 2009 в 15:44
поделиться

3 ответа

С помощью P / Invoke можно с уверенностью сказать, что есть два типа ошибок, которые необходимо обрабатывать.

  1. Исключения, генерируемые самим P / Invoke.
  2. Ошибки, возвращаемые вызываемой вами dll /

В группе 1 может произойти пара исключений (не окончательный список):

  • EntryPointNotFoundException
  • ExecutionEngineException
  • MissingMethodException
  • NotSupportedException

В группе 2 вам необходимо проверить результат возврата вашего вызова метода / функции P / Invoked и действовать соответствующим образом. Здесь пригодится Marshal.GetLastWin32Error ().

Вот почему всегда лучше создавать классы-оболочки для любых нативных вещей, которые вам нужно использовать. Таким образом вы можете преобразовать возвращаемые результаты в исключения и разделить управляемый и собственный код.

10
ответ дан 4 December 2019 в 11:42
поделиться

Я не уверен, существует ли окончательный список исключений, которые могут быть созданы, но я знаю, что может произойти по крайней мере следующее

  • AccessViolationException
  • StackOverflowException
  • Exception когда указанная DLL не найдена. Не могу вспомнить тип, который был у меня в голове
  • OutOfMemoryException

Большинство этих типов исключений не специфичны для PInvoke и могут возникать в любой точке программы. Единственное, что относится к вызову PInvoke, - это исключение DLL not found (чей тип я не могу вспомнить).

4
ответ дан 4 December 2019 в 11:42
поделиться

pinvoke также выбрасывает MissingMethodException на мобильных устройствах, когда процессу не хватает памяти: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx

1
ответ дан 4 December 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: