Excel DNA - Могу ли я избежать одновременной регазмы?

Я пытаюсь оценить Excel ДНК, чтобы использовать его в одной из моих надстроек Excel. Я использую функции C# (.NET 4.0) и хочу вызвать эти функции из Excel. Меня интересует причина, по которой пользователи моего надстройки не являются администраторами и, следовательно, были бы прорывом, если бы я смог найти решение не выполнять регазм на моей.NET dll, чтобы заставить мой надстройку работать.

Я понимаю, что если это похоже на функцию листа (с простыми типами возврата и аргументами), как в: private string Add (int a, double b)Я могу легко обернуть их, используя Excel ДНК. Кроме того, я понимаю, что я также могу вызывать эти простые функции, используя Application.Run из VBA.

Но если у меня есть сложный тип, связанный с API, и я хочу использовать его из VBA, тогда нужно ли мне пересматривать эту сборку и типы? пример как в этом:

private MyType AddLogic (myType1 A,  myType2 B) 

Или есть ли способ в ДНК Excel, что я также могу использовать такие виды функций в VBA без каких-либо regasm или regsvr32?

Спасибо Мани

1 ответ

Решение

Вы имеете в виду поддержку встроенного COM-сервера в Excel-DNA. Есть несколько вариантов, все они отлично работают для пользователей без прав администратора.

  • Вы можете зарегистрировать типы COM во время выполнения в вашем AutoOpen - тогда они будут доступны с поздним связыванием из VBA (так что все, что в VBA вызывает эти типы COM, будет 'Variant', и вы не получите intellisense).
  • Вы можете зарегистрировать типы COM с помощью regsvr32, используя.xll в качестве COM-сервера. Excel-DNA регистрирует свои типы в части реестра HKEY_LOCAL_USER, в которую пользователь всегда может записать. После этого будет запущен проект VBA, использующий типы, представленные COM, даже если надстройка.xll не загружена.
  • Чтобы добавить информацию о библиотеке типов для открытых COM-типов, вам нужно будет выполнить регистрацию regsvr32, которая снова работает без прав администратора, а затем вы получите intellisense и т. Д. В VBA.

Ни в одном из этих случаев вы не используете RegAsm - который регистрирует управляемые сборки для активации во время выполнения - поскольку нативный Excel-DNA .xll сам выполняет посредническую активацию COM ваших типов.NET.

Если вы не заинтересованы в предоставлении функций рабочего листа, лент и т. Д., Вам, вероятно, не нужен Excel-DNA для этого. Вы можете зарегистрировать сборки.NET для использования не-администратором из VBA, просто создав сценарий.reg, который исправит записи реестра в HKEY_LOCAL_USER вместо HKEY_CLASSES_ROOT. Я имею в виду, что регистрация Excel-DNA без прав администратора не является особой магией. Основная причина интеграции этой функции в Excel-DNA заключается в том, чтобы гарантировать, что эти объекты активируются в том же AppDomain, что и остальная часть надстройки Excel-DNA, что сложно и иногда важно.

Другие вопросы по тегам