Избегайте ошибок P / Invoke во время запуска - PullRequest
0 голосов
/ 28 февраля 2010

Похоже, что вызов P-Invoke, когда приложение еще не загружено, вызывает ошибки соответствующих функций.

Например, в данный момент я пытаюсь загрузить при запуске различные DLL через LoadLibrary и проверить, экспортировали ли они определенную функцию.

Если я сделаю это, пока приложение завершит процедуру загрузки, ошибки не выдаются (только результат равен 0, и я могу проверить их через GetLastError), если я делаю это во время запуска (например, событие Load формы) выдает ошибки (например, отсутствующий модуль и т. д.).

Есть ли способ отключить эти ошибки?

Обратите внимание, что это не исключения, а системные сообщения и попытка ... catch здесь не работает.

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 февраля 2010

Не имеет большого смысла, что вы будете видеть окна сообщений от вызова LoadLibrary (). Посмотрите, решает ли P / Invoking SetErrorMode () с SEM_NOOPENFILEERRORBOX вашу проблему. Использование события Shown вместо Load также стоит попробовать.

0 голосов
/ 28 февраля 2010

У меня нет кода для попытки, но у меня такое ощущение, что вы получаете окно сообщения, потому что исключение выдается в отдельном потоке и не обрабатывается вашим блоком try и catch. Можете ли вы попытаться соединить эти два события в начале вашего приложения и попытаться выяснить, перехватывается ли исключение вашим обработчиком событий здесь.

    Application.ThreadException
    AppDomain.CurrentDomain.UnhandledException
0 голосов
/ 28 февраля 2010

Если вы хотите обнаружить / проверить, имеют ли различные библиотеки DLL определенные точки входа, используйте API GetProcAddress (). Если GetProcAddress () возвращает 0 для конкретной точки входа, то эта точка входа не существует в этой DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...