-
Using DLL in Java
I have a working sample program on how to use DLL in java with JNI. I use to be properly implemented:
Code:
/* Test.java */
public class Test {
/*Load the dll that exports functions callable from java*/
static {System.loadLibrary("TestImp");} /* Name Of DLL : TestImp.dll */
/*Imported function declarations*/
public native void print(String msg);
public native byte[] readFile(String path);
public native int searchFile(String path, byte[] b, int bLength);
public native String[] findFiles(String path, String mask);
public native String[] checkProcess(String processName, boolean killIt, boolean printOutput);
public native int startProcess(String commandLine, String workingDir);
public native boolean waitForFileMask(String directrory, String fileMask);
public native boolean waitForAnyFile(String directrory);
public void Test() {
}
public static void main(String [] args) {
Test t = new Test();
/*Printf example*/
t.print("->Testing JNI - Hello from \n");
/*Loading a file as a byte array example*/
System.out.println("->Start Open file Text.txt\n" + new String(t.readFile("Text.txt")));
/*Printf example*/
t.print("->Finish Sample \n");
}
}
So you see that the package was not Test.java, these programs have changed as follows:
(file path : C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes\ver)
Code:
/* Test .java*/
package ver;
public class Test {
/*Load the dll that exports functions callable from java*/
static {System.loadLibrary("TestImp");} /* Name Of DLL : TestImp.dll */
/*Imported function declarations*/
public native void print(String msg);
public native byte[] readFile(String path);
public native int searchFile(String path, byte[] b, int bLength);
public native String[] findFiles(String path, String mask);
public native String[] checkProcess(String processName, boolean killIt, boolean printOutput);
public native int startProcess(String commandLine, String workingDir);
public native boolean waitForFileMask(String directrory, String fileMask);
public native boolean waitForAnyFile(String directrory);
public void Test() {
}
}
And upper branches (file path : C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes) made the following file:
Code:
/*run.java*/
import ver.*;
import java.io.*;
class usepackage{
public static void main(String [] args) {
Test t = new Test ();
t.print(" JAVA ");
t.readFile("Text.txt");
}
}
After the Test. Java & run.java compile and run the following command and I got across the error:
Code:
C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes >java run
Code:
Exception in thread "main" java.lang.UnsatisfiedLinkError: print
at ver.callmydll.print(Native Method)
at usepackage.main(usepackage.java:8)
TestImp.dll Test.java file in System32 and the next there.
How do you fix the error ???
Email : m.hosseyni@ymail.com
-
So rather than reply to Jos, you repost the question? Please do not multipost as it is against the forum rules. Locked.