SWIG 之三:“25 SWIG和Java”

原文地址:25 SWIG and Java

25.1 概述

  SWIG适用于大批量的C++接口转换成JNI,如果C++接口不多的话则没必要。

25.2 准备工作

  配置、生成与编译 SWIG 自动生成代码。

25.3 C/C++ 基本包装

25.3.1 模块、包与生成Java类

  SWIG不会自动生成Java包文件夹,需要外部来辅助创建。

25.3.2 函数
25.3.3 全局变量

  使用 %immutable 指令可以使普通变量变成只读的(仅生成getter函数)。

25.3.4 常量

  使用 #define%constant 指令可以生成Java静态常量。默认情况下生成的 final static 变量是通过JNI函数来初始化的。

#define PI 3.14159
#define VERSION "1.0"
%constant int FOO = 42;
%constant const char *path = "/usr/local";
public interface exampleConstants {
  public final static double PI = exampleJNI.PI_get();
  public final static String VERSION = exampleJNI.VERSION_get();
  public final static int FOO = exampleJNI.FOO_get();
  public final static String path = exampleJNI.path_get();
}

  使用 %javaconst(flag) 来控制生成的变量形式,可以直接生成Java 常量值初始化。

%javaconst(1);
%javaconst(0)BIG;
%javaconst(0)LARGE;

#define EXPRESSION(0x100 + 5)
#define BIG 1000LL
#define LARGE 2000ULL
public interface exampleConstants {
  public final static int EXPRESSION =(0x100 + 5);
  public final static long BIG = exampleJNI.BIG_get();
  public final static java.math.BigInteger LARGE = exampleJNI.LARGE_get();
}

  使用 %javaconstvalue(value) 来设定变量生成的初始化值形式,直接是代码串替换。

%javaconst(1);
%javaconstvalue(“new java.math.BigInteger(\”2000 \“)”)LARGE;
%javaconstvalue(1000)BIG;

#define EXPRESSION(0x100 + 5)
#define BIG 1000LL
#define LARGE 2000ULL
public interface exampleConstants {
  public final static int EXPRESSION =(0x100 + 5);
  public final static BIG = 1000;
  public final static java.math.BigInteger LARGE = new java.math.BigInteger(“2000”);
}
 25.3.5 枚举

  ???

25.3.5.1 匿名枚举
25.3.5.2 Typesafe枚举
25.3.5.3 正确的Java枚举
25.3.5.4 类型不安全的枚举
25.3.5.5 简单枚举

25.3.6 指针

25.3.7 结构体

25.3.8 C++类

25.3.9 C++继承

25.3.10 参数传值(指针、引用、数组、传值)

25.3.10.1 空指针

25.3.11 C++重载函数

25.3.12 C++默认参数

25.3.13 C++命名空间

25.3.14 C++模板

25.3.15 C++智能指针

25.3.15.1 shared_ptr智能指针

25.3.15.2 通用智能指针

25.4 关于生成JAVA类的更多信息

25.4.1 中间JNI类

  通过 %module(jniclassname="name") modulename 的指令可以指定JNI模块名称,如果不设定jniclassname则默认JNI模块名为modulenameJNI,如果设定jniclassname与modulename一致,则modulename自动会变成modulenameModule。

25.4.1.1 中间JNI类编译提示

25.4.2 Java模板类

25.4.2.1 Java模板类语法

25.4.3 Java代理类

25.4.3.1 内存管理

  每个代理类都有一个所有权标志swigCMemOwn此标志的值确定谁负责删除基础C ++对象。如果设置为true,则代理类的终结器将在代理类被垃圾回收时销毁C ++对象。如果设置为false,则代理类的销毁对C ++对象没有影响。

25.4.3.2 继承

25.4.3.3 代理类与垃圾回收

25.4.3.1 内存管理

25.4.3.1 内存管理

25.4.3.1 内存管理

猜你喜欢

转载自www.cnblogs.com/kuliuheng/p/9965939.html