我正在使用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
的二进制字节码编译器,使用以下命令将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
宏中工作,以便根据工作表的内容实例化和使用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...
下时,我可以看到TLB
的Strata
文件(位于“ C:\ Strata \ Strata.tlb”),并将其添加到当前项目中。但是,一旦我在窗口中键入内容或打开Objects Browser
,Excel
就会崩溃,而没有提供有关正在发生的事情的任何有意义的信息。
我对这个问题一无所知。
我的注册过程正确吗?我也必须注册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更方便。