Я работаю над обеспечением надежного взаимодействия .NET для некоторого программного обеспечения с неуправляемым API через COM для сторонних разработчиков..NET справиться с добавлением необязательных параметров к неуправляемому API
Ранее программное обеспечение поддерживало только VBScript для сторонних разработчиков, и из-за этого они привыкли к тому, что могут добавлять новые методы и необязательные параметры для устранения проблем с функциональностью API.
В .NET однако добавление необязательного параметра представляет собой разрывное изменение (по мере изменения сигнатуры метода). Если API был в .NET, это можно легко решить, используя перегруженные методы, однако, поскольку API неуправляемый, мы используем COM-интерфейс, и поэтому я не могу использовать перегрузки.
У меня нет какого-либо влияния политики изменения API
Вещей Я рассмотрел, но не получить в любом месте с:
с помощью отражения Выделяет добавить перегрузки во время выполнения - Насколько я вижу, это может быть сделано только в том случае, если я динамически создаю весь комплект; и может оказаться невозможным, учитывая, что API - это typelib/COM, а не настоящая сборка .NET.
Поймайте и перенаправлять вызывать ошибки - Если необязательный параметр «хит» ошибка имеет всю информацию, необходимую для перенаправления старого метода в новом с дополнительным параметром. К сожалению, я понимаю, что после того, как ошибка будет сброшена, вы не сможете вернуться.
Обертка typelib - Я буду знать заранее, когда API-метод имеет дополнительный параметр. Поэтому я посмотрел, могу ли я как-то добавить перегрузку в typelib или, возможно, обернуть весь typelib в .NET-прокси с перегруженными методами, включенными для перехода между методами pre-/post-optional. Но если это можно сделать, я действительно не могу найти способ сделать это.
Все предложения приветствуются - я становлюсь довольно отчаянным здесь!
n.b. .NET отлично подходит для добавления новых методов, это просто добавление необязательных параметров, которые вызывают у меня проблемы. Кроме того, я пишу в VB.NET, но с радостью могу использовать код на C# и т. Д., Если это упростит ситуацию.
На самом деле это не моя область знаний, но не взаимодействует ли Office с дополнительными параметрами в их API? Вы можете посмотреть, как они справляются с этим. –
Офис PIA имеет гораздо больше ресурсов, чем я, и предоставляет другую сборку для каждой версии Office, которую они поддерживают. Я сомневаюсь, что смогу обойтись без потери тех маленьких волос, которые у меня есть! – thomasmichaelwallace
У меня есть проект У меня есть неуправляемый код C++ с надежным массивом вариантов, которые мне нужно объединить с vb.net. Первоначально использовался vbscript.Я даже не могу написать оболочку C++, потому что я не знаю, как инициализировать saferyray, чтобы иметь fFeatures из 2194, так что com-код работает. Надейтесь, что вы не в одном из этих сценариев с безопасным набором вариантов (вам нужно быстро уйти после решения проблемы). Я почти напишу в C# все, что требует варианта, или напишет собственную оболочку C++. Жаль, что вы не указали ни один код, который мне бы помог. – jeffery