返回信息流rt,今天这个问题着实搞得我头疼,网上搜索的资料多是调用一些系统的dll库,如kernel32,user32,c等实现一些功能,但却很少有自己写的简单的动态库,即使有发现总是不能正确运行,如下:也尝试了按照VS2010中的dll的格式写过,并编译成动态库,按照JNA的转化格式,再调用,但总是提示链接错误,找不到函数(注:不是路径的问题,这个问题已经解决),还是上代码吧:
VS中简单的一个函数:
#ifdef _cplusplus
#error no C++, to kepp this example simple
#endif
__declspec(dllexport) int __stdcall gimmeFive()
{
return 5;
}
然后生成动态库 simpleDLL.dll
下面在JAVA中调用程序:
package test;
import com.sun.jna.Native;
import com.sun.jna.Library;
import com.sun.jna.Platform;
public class DllTest {
public interface SimpleTest extends Library{
SimpleTest INSTANCE=(SimpleTest)Native.loadLibrary("simpleDLL.dll",SimpleTest.class);
public int gimmeFive();
}
public static void main(String[] args){
int result;
result = SimpleTest.INSTANCE.gimmeFive();
System.out.println("I got : " + result);
}
}
编译提示错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'gimmeFive': ???????¨?
at com.sun.jna.Function.<init>(Function.java:179)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:347)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:327)
at com.sun.jna.Library$Handler.invoke(Library.java:203)
at $Proxy0.gimmeFive(Unknown Source)
at test.DllTest.main(DllTest.java:14)
不知各位有遇到过这种情况的吗?
这是一条镜像帖。来源:北邮人论坛 / java / #20759同步于 2011/11/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
如何在vs2010中编译自己的dll库,在Java中实现JNA格式调用?
Mynux
2011/11/13镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
是不是没有extern "C"?C++会进行name mangling,导致JNA按C语言风格的名称来查找"gimmeFive",但找不到,因为实际函数名是类似"?gimmeFive@@X"这样的。