Question

I've downloaded the latest com4j jars and I'm trying to run through the most simple of their examples.

I'm on Windows 7 64 bit and using a 64 bit JVM.

When I run the command (from the com4j tutorial):

java -jar tlbimp.jar -o wsh -p test.wsh %WINDIR%\system32\wshom.ocx

I get:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com4j-amd64.dll: %1 is 
not a valid Win32 application
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at com4j.COM4J.loadNativeLibrary(COM4J.java:569)
        at com4j.COM4J.<clinit>(COM4J.java:522)
        at com4j.tlbimp.driver.Lib.getLibid(Lib.java:90)
        at com4j.tlbimp.driver.Driver.addLib(Driver.java:38)
        at com4j.tlbimp.driver.Main.doMain(Main.java:123)
        at com4j.tlbimp.driver.Main.main(Main.java:56)
Exception in thread "Com4J shutdown hook" java.lang.NoClassDefFoundError: Could
not initialize class com4j.COM4J
        at com4j.COM4J$3.run(COM4J.java:476)

The java code extracts "com4j-amd64.dll" next to the jar.

Was it helpful?

Solution

The latest version has just been released:

http://kohsuke.org/2012/04/27/com4j-updates/

https://github.com/kohsuke/com4j/downloads

Using this one solved all my problems.

OTHER TIPS

You have two options:

  1. Download and use the full latest version (located here: https://github.com/kohsuke/com4j/downloads)
  2. Extract the latest com4j-amd64.dll from the most recent version
    • Download the latest version (located here: https://github.com/kohsuke/com4j/downloads).
    • Open up the com4j.jar with your favorite zip utility (read 7zip)
    • Extract com4j.jar\com4j\com4j-x64.dll to the base directory of your application
    • (optional) Register the dll using REGSVR32 <path to dll>\com4j-x64.dll

I had a similar result at first. I found the com4j-amd64.dll that is produced by com4j is empty. The remedy is to extract the file from the com4j jar file, and put it in the relevant directory by manual action. Com4j will then not auto-produce the file since it is already there. So check if the file is empty as a first step -Carl

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top