java是怎么调用c、c++的dll的
答案:2 悬赏:60
解决时间 2021-03-22 00:00
- 提问者网友:猖狂醉薇
- 2021-03-21 20:35
java是怎么调用c、c++的dll的
最佳答案
- 二级知识专家网友:没感情的陌生人
- 2021-03-21 20:55
用jna,大致这样
把Dll文件放在C:\WINDOWS\system32下,这是window动态链接库的默认存储路径。
新建类dllTest.java,这个名和DLL的名相同,我当初就不知道,费劲周折。代码如下:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class dllTest {
public interface MyDll extends Library {//这个接口是dll与java程序的“连接”
MyDll INSTANCE = (MyDll)Native.loadLibrary("MyDll", MyDll.class);
int Max(int a, int b);//把用到的dll中的函数声明一下,用不到的就不用写了
}
public static void main(String[] args) {
int a = MyDll.INSTANCE.Max(3, 5);
System.out.println("最大数为" + a);
}
}
把Dll文件放在C:\WINDOWS\system32下,这是window动态链接库的默认存储路径。
新建类dllTest.java,这个名和DLL的名相同,我当初就不知道,费劲周折。代码如下:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class dllTest {
public interface MyDll extends Library {//这个接口是dll与java程序的“连接”
MyDll INSTANCE = (MyDll)Native.loadLibrary("MyDll", MyDll.class);
int Max(int a, int b);//把用到的dll中的函数声明一下,用不到的就不用写了
}
public static void main(String[] args) {
int a = MyDll.INSTANCE.Max(3, 5);
System.out.println("最大数为" + a);
}
}
全部回答
- 1楼网友:不服输就别哭
- 2021-03-21 22:29
1为了使c能调用c++写的dll。c++中使用extern "c"{ }修饰该接口即可
这个原因你应该知道吧大概意思是告诉c++编译器这段代码用c编译器编译
编译之后的结果是c方式的而不是c++方式的。
2但是c中不识别extern "c"。
综上两点,在dll头文件中常这样写,如下:
意思就是编译的时候编译成c方式。但是包含头文件时,因为是c调用所以会忽略掉extern "c"
#ifdef __cplusplus
extern "c"
{
#endif
。。。。。。。。。。。。
#ifdef __cplusplus
}
#endif
这个你也明白吧。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯