1

我正在尝试将 Apache poi .jar 转换为 .dll 。我使用下面的脚本进行转换。但是,在那之后我收到很多警告和错误Invalid option -resource:poi-3.8-20120326.dll。这是我使用的脚本。

ikvmc -target:library poi-ooxml-schemas-3.8-20120326.jar
ikvmc -target:library poi-3.8-20120326.jar
ikvmc -target:library -resource:poi-3.8-20120326.dll poi-scratchpad-3.8-20120326.jar
ikvmc -target:library -resource:poi-3.8-20120326.dll poi-ooxml-schemas-3.8-20120326.dll poi-scratchpad-3.8-20120326.dll poi-ooxml-3.8-20120326.jar
ikvmc -target:library -resource:poi-3.8-20120326.dll poi-ooxml-3.8-20120326.dll poi-excelant-3.8-20120326.jar

这是使用 IKVM.Net 的正确方法吗?如果不是,那么执行此操作的正确脚本是什么。

4

4 回答 4

2

编译器-resource选项记录如下:ikvmc

-resource:name=path 将路径包含为名为 name 的 Java 资源

所以这似乎表明它-resource用于将资源文件包含到编译中,而不是(就像你正在做的那样)以前编译的 DLL。

这个怀疑在 ant wrapper around 的resource示例中如何使用该选项的示例证实了这一点:ikvmc

<resource name="/logs/logging.properties" path="${builddir}/logging.properties"/>

由于ikvmc是一个 java-bytecode-to-.net-intermediate-language 编译器,它了解如何读取 jar 文件。因此,与其尝试将(先前生成的)DLL 包含到编译周期中,不如只指向ikvmc原始 jar 文件。

最简单的方法可能是一次性转换所有罐子:

ikvmc -target:library poi-ooxml-schemas-3.8-20120326.jar poi-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar ...
于 2012-12-01T11:55:40.390 回答
1

您需要将选项 -resource 替换为 -reference。

但最好是使用 { } 语法一步编译它。有关详细信息,请参阅wiki。这看起来像:

ikvmc { -target:library poi-ooxml-schemas-3.8-20120326.jar } { -target:library poi-3.8-20120326.jar } { -target:library poi-scratchpad-3.8-20120326.jar } ....
于 2012-12-02T09:20:36.103 回答
0

我刚刚完成了一个项目,在该项目中我使用 IKVM 0.46.0.1 成功转换并使用了 Apache POI 3.9。转换后的 DLL 集支持 2007 年之前和 2007 年之后的 Microsoft Office 格式。

先决条件:

下载 POI 3.9 并将所有 JAR 文件复制到一个目录中 下载 IKVM(我使用版本 0.46.0.1) 以下命令(在所有 POI JAR 所在的同一目录中的 Windows 7 命令行中运行)对我有用:

ikvmc -target:library xmlbeans-2.3.0.jar
ikvmc -target:library stax-api-1.0.1.jar

ikvmc poi-ooxml-schemas-3.9-20121203.jar -target:library -reference:xmlbeans-2.3.0.dll -reference:stax-api-1.0.1.dll 


ikvmc -target:library log4j-1.2.13.jar
ikvmc -target:library commons-logging-1.1.jar
ikvmc -target:library commons-codec-1.5.jar

ikvmc poi-3.9-20121203.jar -target:library -reference:log4j-1.2.13.dll -reference:commons-logging-1.1.dll -reference:commons-codec-1.5.dll

ikvmc -target:library dom4j-1.6.1.jar

ikvmc poi-ooxml-3.9-20121203.jar -target:library -reference:poi-3.9-20121203.dll -reference:poi-ooxml-schemas-3.9-20121203.dll -reference:dom4j-1.6.1.dll -reference:xmlbeans-2.3.0.dll

希望能帮助到你。

于 2013-01-08T03:21:05.853 回答
0

弗兰克一次性转换所有罐子的答案为我解决了这个问题。这是我用于 POI 3.10 的完整命令。所有的罐子都需要在同一个目录中。-out 选项允许您指定输出 dll 的名称,否则它会从第一个 jar 中获取名称。

ikvmc -target:library -out:poi-3.10.dll xmlbeans-2.3.0.jar stax-api-1.0.1.jar poi-ooxml-schemas-3.10-FINAL-20140208.jar log4j-1.2.13.jar commons-logging-1.1.jar commons-codec-1.5.jar poi-3.10-FINAL-20140208.jar dom4j-1.6.1.jar poi-ooxml-3.10-FINAL-20140208.jar 
于 2014-06-02T14:28:22.823 回答