Java调用Dll
来源:互联网 发布:萤石软件下载 编辑:程序博客网 时间:2024/06/13 23:28
参考文章:http://blog.csdn.net/gcangle/article/details/8504629
一、生成dll文件
不会写C代码的同学,建议下一个Dev-cpp来练手,新建一个Dll项目,将其中的.cpp文件和.h文件内容改成以下代码:
①main.h 改写成
#ifndef __MAIN_H__ #define __MAIN_H__ #include <windows.h> /* To use this exported function of dll, include this header * in your project. */ #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif int add(int a,int b); int factorial(int n); #ifdef __cplusplus } #endif #endif // __MAIN_H__
②main.cpp改写成
#include "main.h" int add(int a,int b){ return a + b; } int factorial(int n){ int i; int r = 1; for(i=1;i<n+1;i++) r = r*i; return r; } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: // attach to process // return FALSE to fail DLL load break; case DLL_PROCESS_DETACH: // detach from process break; case DLL_THREAD_ATTACH: // attach to thread break; case DLL_THREAD_DETACH: // detach from thread break; } return TRUE; // succesful }
然后点击项目属性,设置生成dll文件的名称路径,然后编译,就可以在你指定的目录找到扩展名为dll的文件。
将这个dll文件复制到Java安装目录下的bin目录中,文件名称是可以更改的。
二、java代码
①编写一个interface
public interface JNATestDll extends Library { JNATestDll instanceDll = (JNATestDll) Native.loadLibrary("mydll", JNATestDll.class); public int add(int a, int b); public int factorial(int n); public int asd(int n);//这个方法dll中不存在}
mydll这个名称需要和刚才复制到bin目录下的文件名称一致
②编写测试类
@Test public void test3() { int add = JNATestDll.instanceDll.add(2, 3);// int ft = JNATestDll.instanceDll.factorial(10); System.out.println("add = " + add); }
如果正常输出结果,表示java调用dll成功。
JNI也是可以实现的,实现比较复杂,函数名称需要根据java包名等对应,参数类型也需要对应。
我在开发中,碰到一个问题是,dll中要求传一个c++里面的Socket对象,不知道该怎么传参,查了很多资料无果,希望有高手帮忙指点一下
阅读全文
0 0
- java调用dll
- JAVA调用DLL(1)
- JAVA调用DLL
- java调用.dll程序
- JAVA调用DLL(转载),
- java调用.dll程序
- JAVA 调用Dll
- java调用.dll文件
- Java调用DLL方法
- java调用dll
- java调用dll
- JAVA调用DLL
- java调用dll
- java 调用dll JNI
- java调用dll
- java调用Dll
- Java调用.dll文件
- java调用dll例子
- 套接字总结
- C和C++混合编译
- python数据可视化
- php面向对象必知会
- C语音基础-typedef 24
- Java调用Dll
- 通信框架Netty的详细介绍及应用
- Linux下C语言开发(已知进程名得到其PID号)
- 对Android广播接收与发出机制的一些AMS以外的源码分析
- 判断今天是今年的第几天(2)
- Windows版本搭建安装React Native环境配置及相关问题
- CSS Fundamentals/Basic CSS Structure & Syntax
- && 和 || 的一些用法
- 关于基类和派生类的构造函数和析构函数的执行顺序问题