IKVM.NET和Excel VBA

时间:2019-01-29 11:19:02

标签: java .net excel vba ikvm

我正在使用IKVM.NET来将Java库(信号地为Strata)转换为.NET库。这是我执行的步骤:

  1. 我下载了the latest Strata release
  2. 我将存档的JAR文件夹中包含的所有lib文件解压缩到C:\Strata\,包括以下辅助库:
    • commons-math3-3.6.1.jar
    • guava-26.0-jre.jar
    • 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的二进制字节码编译器,通过以下命令JARStrata的{​​{1}}文件转换为.NET库。 / li>

完成上述过程后,即使显示了有关缺少类的一些警告,我仍然获得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类。 / p>

这是我到目前为止尝试过的,但无济于事:

  1. 我将所有Strata库和IKVM.NET包装器注册到Strata中,如下所示:GACgacutil /i "C:\IKVM\IKVM.*.dll"
  2. 我将gacutil /i "C:\Strata\Strata.dll"包装器注册为Strata组件,并如下创建其类型库:COM

现在,当我打开regasm /codebase /tlb "C:\Strata\Strata.dll"并进入Excel下时,我可以看到Development > Visual Basic > Tools > References...的{​​{1}}文件(位于“ C:\ Strata \ Strata.tlb ”),然后可以将其添加到当前项目中。但是,一旦我在窗口中键入内容或打开TLBStrata就会崩溃,而没有提供有关正在发生的事情的任何有意义的信息。

我对这个问题一无所知。

我的注册过程是否正确?我也必须注册Objects Browser库并创建其类型库吗?我应该将它们与Excel包装器类型库一起包含在IKVM.NET项目中吗?问题可能是由于我使用的是Excel VBA的x64版本,并且包装器已经在Strata下编译了吗?我是否需要通过在每个公共类上添加Excel属性来编辑包装器?可能是由于包装器包含奇怪的方法名称(例如“ \ _Build01_ \ p”)导致的问题?

1 个答案:

答案 0 :(得分:0)

您可以直接使用Java来构建Excel加载项,而不必使用IKVM.NET。

要使用Java构建Excel加载项而不需要使用.NET,请参见https://exceljava.com

您甚至可能对Strata-Excel项目感兴趣,该项目将Strata库包装在Excel加载项中:https://github.com/exceljava/strata-excel

我认为您应该发现这比将Java库转换为.NET更方便。