PreserveSig для нестатического метода взаимодействия - PullRequest
0 голосов
/ 15 октября 2019

Вопрос

Может ли атрибут 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, но я не могу контролировать тот факт, что он вызывает исключение, указывающее, что ячейки не были найдены. Я искал способ сказать библиотеке взаимодействия «не выбрасывать исключение для этого метода», или даже способ обернуть / переопределить метод с версией, которая не выдает исключение.

1 Ответ

0 голосов
/ 15 октября 2019

Увы, вы не можете применять атрибуты к управляемому коду, который вы не контролируете.

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