Предотвращение сбоя сторонних dll от PowerShell

48
6

Я создаю модуль PowerShell, который использует неуправляемый API. То, как это работает, выглядит примерно так:

PowerShell Module
|
˅
.NET Wrapper DLL
|
˅
Native DLL

У этой родной DLL есть два способа сообщить, была ли операция неудачной или нет - путем записи кодов состояния в stdout или путем исключения исключений Win32. Вы можете указать свои предпочтения, вызывая API UseExceptions() или DontUseExceptions(). Однако оба варианта сосут:

Без исключений, когда я делаю успешный вызов функции, 0 печатается на экране. Если вызов функции не работает, на экране отображается предупреждающее сообщение. Это не только затрудняет обнаружение ошибок, но и загромождает мой вывод модуля пользователю. С исключениями, если есть небольшая ошибка, весь процесс PowerShell выйдет из строя, потому что это исключение Win32 в отличие от исключения.NET.

Есть ли способ предотвратить исключение Win32 из-за сбоя всего процесса PowerShell? Или есть способ перехватить этот стандартный вывод DLL и самостоятельно проанализировать коды состояния?

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

спросил(а) 2012-09-15T05:32:00+04:00 7 лет, 2 месяца назад
1
Решение
45

В вашей DLL-библиотеке.NET Wrapper попробуйте поймать SEHException, чтобы узнать, можете ли вы поймать исключение Win32. Другой вариант - написать.NET-оболочку с использованием CLI/C++, а затем использовать механизм обработки исключений C++, чтобы поймать исключение.

ответил(а) 2012-09-15T06:03:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема