我有以下三个文件:
sab1.hpp:
class CRectangle
{
int x, y;
public:
void set_values (int,int);
void print(char **db);
int area ();
};
sab1.cpp:
#include <iostream>
#include "sab1.hpp"
using namespace std;
int CRectangle::area ()
{
return (x*y);
}
void CRectangle::set_values (int a, int b)
{
x = a;
y = b;
}
void CRectangle::print(char **db)
{
cout <<db[0];
}
int main ()
{
CRectangle rect;
char *a[] = {"Hi", "bye" } ;
rect.set_values (3,4);
cout << "area: " << rect.area();
rect.print(&a[0]);
return 0;
}
sab1.i:
%module Rec
%{
/* Includes the header in the wrapper code */
#include "sab1.hpp"
%}
class CRectangle {
int x, y;
public:
void set_values (int,int);
void print(char **db);
int area ();
};
我使用以下常用命令创建各种中间文件:
1) 痛饮 -c++ -java sab1.i
2) g++ -fpic -c sab1.cpp sab1_wrap.cxx -I /usr/lib/jvm/java-6-openjdk-i386/include/ -I /usr/lib/jvm/java-6-openjdk-i386/include /linux/
然后我使用这个创建一个共享库: g++ --shared sab1.o sab1_wrap.o -o libegs.so
然后我创建以下 Java 文件来访问 C++ 类的函数:
public class Test
{
public static void main(String args[])
{
System.loadLibrary("egs");
CRectangle a = new CRectangle();
a.set_values(4,5);
System.out.println(a.area());
a.print("Hi");
}
}
当我编译 Java 文件 (javac -classpath . Test.java ) 时,我收到以下错误:
Test.java:17: print(SWIGTYPE_p_p_char) in CRectangle cannot be applied to (java.lang.String) a.print("Hi");
^
那么,如何让 Java 代码理解 char ** 变量呢?我尝试在 SWIG 接口文件 (sab1.i) 中创建类型映射,但我无法正确弄清楚。
在此先感谢您的帮助。