Java调用vs环境下C++编写的动态链接库
2017-07-07 10:49
489 查看
一、VS下生成dll文件(代码来自博文①)
MyCode.h:
MyCode.cpp:
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。
二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:
Dll_Demo.java:
JNATestDll.java:
注意:
用Java Build
Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的,Java Build
Path是我们编译需要的包,在比如在import ***.***.***时如果没用java Build
Path导入包的话类里面就有红叉,说不识别这个类;
导入到lib下是程序运行时需要的包,即便用Java Build Path导入过的包,没放到lib下,运行项目时会出现ClassNotFoundException的异常.
在buildpath里面添加jar,注意路径必须是本地“/../..."
参考的博文:
①vs开发dll(dll意义、使用、函数导出方式):http://www.jellythink.com/archives/111
②vs编写动态链接库详细步骤:http://blog.csdn.net/sunxiaoju/article/details/51175505
③Java调用dll文件两种方法(jna、jnative):http://www.cnblogs.com/huozhong/p/5830485.html
PS:还是集成开发环境强大啊啊啊,纠结了一个小时的命令行,换eclipse十几分钟搞定!
一、VS下生成dll文件(代码来自博文①)
MyCode.h:
MyCode.cpp:
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。
二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:
Dll_Demo.java:
JNATestDll.java:
注意:
用Java Build
Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的,Java Build
Path是我们编译需要的包,在比如在import ***.***.***时如果没用java Build
Path导入包的话类里面就有红叉,说不识别这个类;
导入到lib下是程序运行时需要的包,即便用Java Build Path导入过的包,没放到lib下,运行项目时会出现ClassNotFoundException的异常.
在buildpath里面添加jar,注意路径必须是本地“/../..."
参考的博文:
①vs开发dll(dll意义、使用、函数导出方式):http://www.jellythink.com/archives/111
②vs编写动态链接库详细步骤:http://blog.csdn.net/sunxiaoju/article/details/51175505
③Java调用dll文件两种方法(jna、jnative):http://www.cnblogs.com/huozhong/p/5830485.html
PS:还是集成开发环境强大啊啊啊,纠结了一个小时的命令行,换eclipse十几分钟搞定!
MyCode.h:
#ifndef _MYCODE_H_
#define _MYCODE_H_
#ifdef DLLDEMO1_EXPORTS
#define EXPORTS_DEMO _declspec( dllexport )
#else
#define EXPORTS_DEMO _declspec(dllimport)
#endif
extern "C" EXPORTS_DEMO int Add(int a, int b);
#endif
MyCode.cpp:
#include "stdafx.h"
#include "MyCode.h"
int Add(int a, int b)
{
return (a + b);
}
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。
二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:
Dll_Demo.java:
package test;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import implementation.JNATestDll;
public class Dll_Demo {
//public interface CLibrary extends Library {
//CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),CLibrary.class);
//void printf(String format, Object... args);
//}
public static void main(String[] args) {
//CLibrary.INSTANCE.printf("Hello, World/n");
System.out.println(JNATestDll.instanceDll.Add(1, 2));
//for (int i = 0; i < args.length; i++) {
//CLibrary.INSTANCE.printf("Argument %d: %s/n", i, args[i]);
//}
}
}
JNATestDll.java:
package implementation;
import com.sun.jna.Library;
import com.sun.jna.Native;
import test.Dll_Demo;
public interface JNATestDll extends Library {
JNATestDll instanceDll = (JNATestDll)Native.loadLibrary("DllDemo1",JNATestDll.class);
public int Add(int a,int b);
//public int factorial(int n);
}
注意:
用Java Build
Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的,Java Build
Path是我们编译需要的包,在比如在import ***.***.***时如果没用java Build
Path导入包的话类里面就有红叉,说不识别这个类;
导入到lib下是程序运行时需要的包,即便用Java Build Path导入过的包,没放到lib下,运行项目时会出现ClassNotFoundException的异常.
在buildpath里面添加jar,注意路径必须是本地“/../..."
参考的博文:
①vs开发dll(dll意义、使用、函数导出方式):http://www.jellythink.com/archives/111
②vs编写动态链接库详细步骤:http://blog.csdn.net/sunxiaoju/article/details/51175505
③Java调用dll文件两种方法(jna、jnative):http://www.cnblogs.com/huozhong/p/5830485.html
PS:还是集成开发环境强大啊啊啊,纠结了一个小时的命令行,换eclipse十几分钟搞定!
一、VS下生成dll文件(代码来自博文①)
MyCode.h:
#ifndef _MYCODE_H_
#define _MYCODE_H_
#ifdef DLLDEMO1_EXPORTS
#define EXPORTS_DEMO _declspec( dllexport )
#else
#define EXPORTS_DEMO _declspec(dllimport)
#endif
extern "C" EXPORTS_DEMO int Add(int a, int b);
#endif
MyCode.cpp:
#include "stdafx.h"
#include "MyCode.h"
int Add(int a, int b)
{
return (a + b);
}
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。
二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:
Dll_Demo.java:
package test;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import implementation.JNATestDll;
public class Dll_Demo {
//public interface CLibrary extends Library {
//CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),CLibrary.class);
//void printf(String format, Object... args);
//}
public static void main(String[] args) {
//CLibrary.INSTANCE.printf("Hello, World/n");
System.out.println(JNATestDll.instanceDll.Add(1, 2));
//for (int i = 0; i < args.length; i++) {
//CLibrary.INSTANCE.printf("Argument %d: %s/n", i, args[i]);
//}
}
}
JNATestDll.java:
package implementation;
import com.sun.jna.Library;
import com.sun.jna.Native;
import test.Dll_Demo;
public interface JNATestDll extends Library {
JNATestDll instanceDll = (JNATestDll)Native.loadLibrary("DllDemo1",JNATestDll.class);
public int Add(int a,int b);
//public int factorial(int n);
}
注意:
用Java Build
Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的,Java Build
Path是我们编译需要的包,在比如在import ***.***.***时如果没用java Build
Path导入包的话类里面就有红叉,说不识别这个类;
导入到lib下是程序运行时需要的包,即便用Java Build Path导入过的包,没放到lib下,运行项目时会出现ClassNotFoundException的异常.
在buildpath里面添加jar,注意路径必须是本地“/../..."
参考的博文:
①vs开发dll(dll意义、使用、函数导出方式):http://www.jellythink.com/archives/111
②vs编写动态链接库详细步骤:http://blog.csdn.net/sunxiaoju/article/details/51175505
③Java调用dll文件两种方法(jna、jnative):http://www.cnblogs.com/huozhong/p/5830485.html
PS:还是集成开发环境强大啊啊啊,纠结了一个小时的命令行,换eclipse十几分钟搞定!
相关文章推荐
- JNI技术之Java调用C/C++编写的第三方dll-动态链接库
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案
- Java调用c++动态链接库(一) JNative 开发环境的搭建
- Java调用c++动态链接库用的 JNI转换接口
- Java通过JNI调用C++动态链接库
- java 调用c++动态链接库
- JNA实现Java调用C++动态链接库
- C++编写动态链接库供VFP调用
- JNI编程:java 调用c++动态链接库
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- C++对动态链接库的编写和调用
- Java调用C/C++编写的动态连接库-JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- 如何用java调用c++编写成的DLL
- 用C/C++编写与调用动态链接库(DLL)文件
- Java调用C++编写的dll
- C#调用C++编写的动态链接库dll文件
- java 用JNA方法调用C++动态链接库