Results 1 to 3 of 3
Thread: Using DLL in Java
- 11-24-2010, 08:48 AM #1
Member
- Join Date
- Apr 2010
- Posts
- 2
- Rep Power
- 0
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:
So you see that the package was not Test.java, these programs have changed as follows:Java 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"); } }
(file path : C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes\ver)
And upper branches (file path : C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes) made the following file:Java 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() { } }
After the Test. Java & run.java compile and run the following command and I got across the error:Java 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"); } }
Java Code:C:\Tomcat5.5\webapps\ROOT\JNI\WEB-INF\classes >java run
TestImp.dll Test.java file in System32 and the next there.Java Code:Exception in thread "main" java.lang.UnsatisfiedLinkError: print at ver.callmydll.print(Native Method) at usepackage.main(usepackage.java:8)
How do you fix the error ???
Email : <mod edit: deleted -- let's keep all discussions public>Last edited by Fubarable; 11-24-2010 at 12:54 PM. Reason: see Mod edit above.
- 11-24-2010, 10:34 AM #2
- Join Date
- Sep 2008
- Location
- Voorschoten, the Netherlands
- Posts
- 11,407
- Blog Entries
- 7
- Rep Power
- 17
I won't email you; you write here you read here; if you change the package of your class the native code names also change. Your print() method has a different name now; you should change those names in your C/C++ code and recompile everything. (for the 'new' names read the generated .h file).
kind regards,
JosLast edited by Fubarable; 11-24-2010 at 12:55 PM.
When people rob a bank they get a penalty; when banks rob people they get a bonus.
-
OP, please do not multipost your question. I've locked your other thread. Also, please no email addresses as your discussions should be public.


LinkBack URL
About LinkBacks


Bookmarks