次の3つのファイルがあります。
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) swig -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
次に、C++ クラスの関数にアクセスするための次の Java ファイルを作成します。
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) でタイプマップを作成しようとしましたが、正しく理解できません。
助けてくれてありがとう。