IKVM.NET & Excel VBA - PullRequest
       15

IKVM.NET & Excel VBA

0 голосов
/ 29 января 2019

Я использую IKVM.NET, чтобы преобразовать библиотеку Java (сигнально, Strata ) в библиотеку .NET.Вот шаги, которые я выполняю:

  1. Я загружаю последний выпуск Strata .
  2. Я распаковываю все файлы JAR, содержащиеся в папке libархива до C:\Strata\, включая следующие вспомогательные библиотеки:
    • commons-math3-3.6.1.jar
    • guava-26.0-jre.банка
    • joda-beans-2.4.0.jar
    • joda-convert-2.2.0.jar
    • slf4j-api-1.7.25.jar
  3. Я создаю ключевой файл для библиотеки, которую хочу создать, с помощью команды sn -k "C:\Strata\Strata.snk".
  4. Используя двоичный компилятор байт-кода IKVM.NET, я конвертирую JAR файлы Strata в библиотеку .NET с помощью следующей команды: ikvmc -out:"C:\Strata\Strata.dll" -keyfile:"C:\Strata\Strata.snk" -assembly:Strata -version:2.2.0 -fileversion:2.2.0 -target:library -platform:anycpu -recurse:"C:\Strata\*.jar".

После того, какописанный выше процесс выполнен, даже если отображаются несколько предупреждений, касающихся отсутствующих классов, я получаю рабочую оболочку .NET из Strata.Если я создам новый проект Visual Studio со ссылкой на сборку Strata.dll, я могу без проблем использовать его классы и методы.

Чего бы я действительно хотел добиться, так это заставить работать оболочку Excel VBA макросов, чтобы я мог создавать экземпляры и использовать Strata классы в сабвуферах в соответствии с содержанием листов.

Это то, что я пробовал до сих пор, но безрезультатно:

  1. Я регистрирую все библиотеки IKVM.NET и оболочку Strata в GAC следующим образом: gacutil /i "C:\IKVM\IKVM.*.dll", gacutil /i "C:\Strata\Strata.dll".
  2. Я регистрирую оболочку Strata как *Компонент 1072 *, и я создаю его библиотеку типов следующим образом: regasm /codebase /tlb "C:\Strata\Strata.dll".

Теперь, когда я открываю Excel и захожу под Development > Visual Basic > Tools > References..., я вижу TLB файл Strata (находится в "C: \ Strata \ Strata.tlb"), и я могу добавить его в текущий проект.Но как только я что-то набираю, окно или я открываю Objects Browser, Excel вылетает без предоставления какой-либо значимой информации о происходящем.

Я совершенно не в курсе этой проблемы.

Мой процесс регистрации правильный?Нужно ли регистрировать библиотеки IKVM.NET и создавать их библиотеки типов?Стоит ли включать их в проект Excel VBA вместе с библиотеками типов оболочки Strata?Может ли проблема быть вызвана тем, что я использую x64-версию Excel, а оболочка была скомпилирована в AnyCPU?Нужно ли редактировать обертку, добавив атрибут ComVisible в каждый открытый класс?Может ли эта проблема быть связана с тем, что оболочка содержит странные имена методов, такие как «\ _Build01_ \ p»?

1 Ответ

0 голосов
/ 10 июня 2019

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

Чтобы создать надстройку Excel в Java вместо использования .NET, см. https://exceljava.com.

Существует даже проект Strata-Excel, который может вас заинтересовать, который оборачивает библиотеку Strata в надстройку Excel: https://github.com/exceljava/strata-excel

Я думаю, вам это будет гораздо удобнее, чемпреобразование библиотек Java в .NET.

...