Convert Apache POI .jar to .dll using IKVM.Net

2019-04-16 04:55发布

I'm trying to convert Apache poi .jar to .dll . I used the script below to convert. However I'm getting lot of warnings and error Invalid option -resource:poi-3.8-20120326.dll after that. Here's the script i used.

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

Is this correct way to use IKVM.Net . If not what is the correct script to do this.

4条回答
我只想做你的唯一
2楼-- · 2019-04-16 05:08

I just completed a project where I have successfully converted and used Apache POI 3.9 using IKVM 0.46.0.1. The converted set of DLLs support pre 2007 and post 2007 Microsoft Office formats.

Prerequisites:

Download POI 3.9 and copy all the JAR files into one directory Download IKVM (I used version 0.46.0.1) The following commands (run in Windows 7 command line in the same directory where all the POI JARs are) did the trick for me:

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

Hope it helps.

查看更多
等我变得足够好
3楼-- · 2019-04-16 05:08

The -resource option of the ikvmc compiler is documented like this:

-resource:name=path Includes path as a Java resource named name

So that seems to indicate that -resource is used to include resource files into the compilation, and not (like you're doing) previously compiled DLLs.

This suspicion is confirmed by this example of how the resource option is used in an example of the ant wrapper around ikvmc:

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

Since ikvmc is a java-bytecode-to-.net-intermediate-language compiler, it understands how to read jar files. So instead of trying to include the (previously generated) DLLs into the compilation cycle, you should just point ikvmc to the original jar files.

The simplest way to do this is probably by converting all jars in one go:

ikvmc -target:library poi-ooxml-schemas-3.8-20120326.jar poi-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar ...
查看更多
混吃等死
4楼-- · 2019-04-16 05:16

Frank's answer of converting all the jars in one go solved the problem for me. Here's the full command I used for POI 3.10. All of the jars need to be in the same directory. The -out option allows you to specify the name of the output dll, otherwise it takes the name from the first 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 
查看更多
不美不萌又怎样
5楼-- · 2019-04-16 05:19

You need to replace the option -resource with -reference.

But the best is to compile it in one step with { } syntax. See the wiki for details. This can look like:

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 } ....
查看更多
登录 后发表回答