ДНК Excel - Могу ли я избежать регазмации все вместе?

Я пытаюсь оценить Excel DNA, чтобы использовать его в одной из моих надстроек Excel. Я использую функции C# (.NET 4.0) и хочу вызывать эти функции из Excel. Причина, по которой я заинтересован, заключается в том, что пользователи моей надстройки не являются администраторами, и, следовательно, это будет прорывом, если я смогу найти решение не выполнять regasm в моей .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?

Спасибо Мани


person Everything Matters    schedule 31.10.2011    source источник


Ответы (1)


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

  • Вы можете зарегистрировать типы COM во время выполнения в вашем AutoOpen - тогда они будут доступны с поздней привязкой из VBA (поэтому все, что в VBA вызывает эти типы COM, будет «вариантом», и вы не получите 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, что сложно, а иногда и важно.

person Govert    schedule 31.10.2011
comment
Спасибо, что разъяснили Говерту. Для меня 2-й вариант звучит хорошо. Просто для подтверждения, вы хотите сказать, что regsvr32 в excel dna .xll не требует прав администратора, поскольку он делает записи реестра только в HKLU. Потому что я знаю, что когда вы обычно запускаете regsvr32 на родной dll, ей нужны права администратора. - person Everything Matters; 01.11.2011
comment
как дела у этого Мани? я в похожем случае - person nicolas; 14.02.2012