Вопрос
Может ли атрибут PreserveSig быть применен к внешне определенным нестатическим функциям? Например, можем ли мы пометить следующий метод с помощью PreserveSig = true:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.range.specialcells?view=excel-pia
Research
Документы Microsoft описывают использование атрибута PreserveSig для управления ошибкойТип, возвращаемый как HRESULT, возвращается как есть или если он преобразуется в исключение. Но все примеры этого онлайн применимы к статическим методам, например, см .:
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute.preservesig?view=netframework-4.8
Наконец, если мы определяем библиотеку COM Interop, то, похоже, мы можем легко сказать методыне преобразовывать ошибки в исключения, помечая их с помощью PreserveSig, например, см .:
https://blogs.msdn.microsoft.com/adam_nathan/2003/04/30/preservesig/
Но проблема здесь в том, что предполагается, что именно мы пишем библиотеку. Это не относится к внешней библиотеке, определенной в импортированной DLL.
Related
.NET C #: можно ли автоматически импортировать TLB (полу) и добавить PreserveSig водин тип?
Вариант использования
Я использую библиотеку взаимодействия Microsoft.Office.Interop.Excel для циклического прохождения каждого рабочего листа в книге и проверки на наличие ошибок с помощью Range. Функция SpecialCells используется для используемого диапазона каждого листа. Я получаю доступ ко всем объектам взаимодействия, начиная с нажатия кнопки на ленте и вытягивая объект приложения:
Window window = e.Control.Context;
return window.Application;
Затем я использую этот объект приложения, чтобы получить рабочую книгу, а затем рабочие листы,и затем UsedRange каждого рабочего листа, который является объектом Range, частью библиотеки Interop. Из этого объекта Range я могу вызвать функцию SpecialCells, но я не могу контролировать тот факт, что он вызывает исключение, указывающее, что ячейки не были найдены. Я искал способ сказать библиотеке взаимодействия «не выбрасывать исключение для этого метода», или даже способ обернуть / переопределить метод с версией, которая не выдает исключение.