Если Вы действительно идете для создания нескольких проектов, удостоверьтесь все, кто добавляет, что код к решению полностью осведомлен о намерении их, и сделайте все, что Вы можете, чтобы заставить их понимать зависимости между проектами. Если Вы когда-либо пытались разобраться в путанице, когда кто-то пошел и добавил ссылки, которые не должны были быть там и выйти сухим из воды в течение многих недель, Вы поймете эту точку
С помощью P / Invoke можно с уверенностью сказать, что есть два типа ошибок, которые необходимо обрабатывать.
В группе 1 может произойти пара исключений (не окончательный список):
В группе 2 вам необходимо проверить результат возврата вашего вызова метода / функции P / Invoked и действовать соответствующим образом. Здесь пригодится Marshal.GetLastWin32Error ().
Вот почему всегда лучше создавать классы-оболочки для любых нативных вещей, которые вам нужно использовать. Таким образом вы можете преобразовать возвращаемые результаты в исключения и разделить управляемый и собственный код.
Я не уверен, существует ли окончательный список исключений, которые могут быть созданы, но я знаю, что может произойти по крайней мере следующее
Большинство этих типов исключений не специфичны для PInvoke и могут возникать в любой точке программы. Единственное, что относится к вызову PInvoke, - это исключение DLL not found (чей тип я не могу вспомнить).
pinvoke также выбрасывает MissingMethodException
на мобильных устройствах, когда процессу не хватает памяти: http://www.tomergabel.com/NETCompactFrameworkPInvokeAndMissingMethodException.aspx