Использование стандартных библиотек .Net с VBA - PullRequest
7 голосов
/ 17 ноября 2010

Я успешно смог запустить свой собственный код .Net, выполнив шаги, опубликованные здесь Выполнить код .NET 3.0 из Office 2003

Есть ли способ использовать стандарт.Чистые библиотеки без необходимости писать обертку?Таким образом, мы можем избежать регистрации и установки собственной библиотеки DLL в GAC на компьютере клиента.

Я обнаружил файлы tlb уже в папках C: \ Windows \ Microsof.NET \ Framework ибыл в состоянии добавить ссылку на mscorlib.dll.Глядя на документацию для RijndaelManaged , этот класс кажется видимым COM.

Я могу создать экземпляр, но как только я пытаюсь работать с ним, я получаю ошибкинапример, "Несоответствие типов").

Sub Macro1()
   Dim aesImplementation As New RijndaelManaged

   Set key = aesImplementation.GenerateKey()
   Set iv = aesImplementation.GenerateIV()
End Sub

Я готов принять любые предложения, которые вы можете предложить!

Ответы [ 2 ]

1 голос
/ 27 января 2017

Таким образом вы сможете использовать ComVisible .NET классы.Однако методы GenerateKey и GenerateIV не имеют возвращаемого значения.Попробуйте:

Sub Macro1()
   Dim aesImplementation As New RijndaelManaged

   aesImplementation.GenerateKey
   Key = aesImplementation.Key
   aesImplementation.GenerateIV
   IV = aesImplementation.IV
End Sub

или лучше, не в последнюю очередь потому, что при отладке вы можете видеть, возникает ли ошибка во время построения или при вызове метода:

Sub Macro1()
   Dim aesImplementation As RijndaelManaged
   Set aesImplementation = New RijndaelManaged

   aesImplementation.GenerateKey
   Key = aesImplementation.Key
   aesImplementation.GenerateIV
   IV = aesImplementation.IV
End Sub
1 голос
/ 22 ноября 2010

Пока невозможно.VBA (VB для приложений) - это не VB, а отдельная сделка, имитирующая весь основной синтаксис более старых версий VB.Это почти как использование очень урезанной версии обычного, более старого VB.На самом деле, VBScript является наиболее близким к VBA.Возможно, когда-нибудь Microsoft создаст методы для работы непосредственно с GAC, но до тех пор (и этот день, вероятно, будет означать смерть COM, я уверен), вы застряли, используя метод COM CreateObject(), добавив ссылку наCOM-зарегистрированную библиотеку для вашего проекта Office или прямую ссылку на VBA / COM-совместимую DLL или TLB-файл в вашем проекте Office.

В GAC по умолчанию довольно много библиотек с поддержкой COM, но для большинствавы застряли, создавая Com Callable Wrapper сначала в VB.Net или C #.

И наоборот, почти все приложения MS Office поддерживают COM, поэтому вы можете работать с установленными приложениями Office через проекты VB.Netхочу.

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