我正在使用IKVM.NET以便将Java库(通常为Strata)转换为.NET库。这是我执行的步骤:


我下载the latest Strata release
我将存档的JAR文件夹中包含的所有lib文件解压缩到C:\Strata\,包括以下辅助库:


commons-math3-3.6.1.jar
番石榴26.0-jre.jar
joda-beans-2.4.0.jar
joda-convert-2.2.0.jar
slf4j-api-1.7.25.jar

我使用命令sn -k "C:\Strata\Strata.snk"为要创建的库生成密钥文件。
使用IKVM.NET的二进制字节码编译器,使用以下命令将JARStrata文件转换为.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宏中工作,以便根据工作表的内容实例化和使用subs中的Strata类。

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


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


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

我对这个问题一无所知。

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

最佳答案

除了使用IKVM.NET,您还可以直接使用Java来构建Excel加载项。

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

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

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

10-07 15:52