Java调用vs环境下C++编写的动态链接库



一、VS下生成dll文件(代码来自博文①)
MyCode.h:
 
    
  1. #ifndef _MYCODE_H_
  2. #define _MYCODE_H_
  3. #ifdef DLLDEMO1_EXPORTS
  4. #define EXPORTS_DEMO _declspec( dllexport )
  5. #else
  6. #define EXPORTS_DEMO _declspec(dllimport)
  7. #endif
  8. extern "C" EXPORTS_DEMO int Add(int a, int b);
  9. #endif
MyCode.cpp:
 
    
  1. #include "stdafx.h"
  2. #include "MyCode.h"
  3. int Add(int a, int b)
  4. {
  5. return (a + b);
  6. }
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。

二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:

 Dll_Demo.java:
 
     
  1. package test;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. import com.sun.jna.Platform;
  5. import implementation.JNATestDll;
  6. public class Dll_Demo {
  7. // public interface CLibrary extends Library {
  8. // CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),CLibrary.class);
  9. // void printf(String format, Object... args);
  10. // }
  11. public static void main(String[] args) {
  12. //CLibrary.INSTANCE.printf("Hello, World/n");
  13. System.out.println(JNATestDll.instanceDll.Add(1, 2));
  14. // for (int i = 0; i < args.length; i++) {
  15. // CLibrary.INSTANCE.printf("Argument %d: %s/n", i, args[i]);
  16. // }
  17. }
  18. }
JNATestDll.java:
 
    
  1. package implementation;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. import test.Dll_Demo;
  5. public interface JNATestDll extends Library {
  6. JNATestDll instanceDll = (JNATestDll)Native.loadLibrary("DllDemo1",JNATestDll.class);
  7. public int Add(int a,int b);
  8. //public int factorial(int n);
  9. }


注意:
用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:
 
     
  1. #ifndef _MYCODE_H_
  2. #define _MYCODE_H_
  3. #ifdef DLLDEMO1_EXPORTS
  4. #define EXPORTS_DEMO _declspec( dllexport )
  5. #else
  6. #define EXPORTS_DEMO _declspec(dllimport)
  7. #endif
  8. extern "C" EXPORTS_DEMO int Add(int a, int b);
  9. #endif
MyCode.cpp:
 
     
  1. #include "stdafx.h"
  2. #include "MyCode.h"
  3. int Add(int a, int b)
  4. {
  5. return (a + b);
  6. }
解决方案配置选择release,平台配成x64,编译完成后去工程的release目录下复制dll文件,拷到Java工程里。

二、Java工程
CSDN.NET下载jna-4.2.1.jar包导入Java工程:

 Dll_Demo.java:
 
      
  1. package test;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. import com.sun.jna.Platform;
  5. import implementation.JNATestDll;
  6. public class Dll_Demo {
  7. // public interface CLibrary extends Library {
  8. // CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),CLibrary.class);
  9. // void printf(String format, Object... args);
  10. // }
  11. public static void main(String[] args) {
  12. //CLibrary.INSTANCE.printf("Hello, World/n");
  13. System.out.println(JNATestDll.instanceDll.Add(1, 2));
  14. // for (int i = 0; i < args.length; i++) {
  15. // CLibrary.INSTANCE.printf("Argument %d: %s/n", i, args[i]);
  16. // }
  17. }
  18. }
JNATestDll.java:
 
     
  1. package implementation;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. import test.Dll_Demo;
  5. public interface JNATestDll extends Library {
  6. JNATestDll instanceDll = (JNATestDll)Native.loadLibrary("DllDemo1",JNATestDll.class);
  7. public int Add(int a,int b);
  8. //public int factorial(int n);
  9. }


注意:
用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十几分钟搞定!

你可能感兴趣的:(C/C++,Java)