1

いくつかのタイプマップを宣言しました:

    #
    #  Gv::GvString -> Java - String
    #
    %feature("director") Gv::ErrorHandler;
    %typemap(jni) Gv::GvString "jstring"
    %typemap(jstype) Gv::GvString "String"
    %typemap(jstype) Gv::GvString const & "String"
    %typemap(jstype) Gv::GvString & "String"
    %typemap(javaout) Gv::GvString {
      GvString ret = new GvString( $jnicall, true);
      return ret.toString();
    }

    %typemap(javain
    ,pre=
    "     // GvString - String wrapper
         GvString tmp$javainput = new GvString( $javainput);"
    ,post=""
    ,pgcppname="tmp$javainput"
    ) Gv::GvString const & "$javaclassname.getCPtr( tmp$javainput)"

    %typemap(javain
    ,pre=
    "      // GvString - String wrapper
          GvString tmp$javainput = new GvString( $javainput);"
    ,post=
    "      $javainput = tmp$javainput.toString();"
    ,pgcppname="tmp$javainput"
    ) Gv::GvString & "$javaclassname.getCPtr( tmp$javainput)"

しかし、リダイレクタは私のデータ型をラップしません。ファイル GvJNI.java は、引数 GvString -> 文字列をタイプマップしません:

  public static void SwigDirector_ErrorHandler_OnError(ErrorHandler self, long wnd, long sReason) {
        self.OnError(new Window(wnd, false), new <b>GvString</b>(sReason, false));
      }

私のC++コードは次のようになります:

namespace Gv
{
  class Window;
  class GvString;

  class GV_DECL ErrorHandler
  {
    public:
      ErrorHandler();
      virtual ~ErrorHandler();

      virtual void OnError( Window & wnd, GvString const & sReason) = 0;  /**< retrieve error - messages */
      virtual void OnFatal( Window & wnd, GvString const & sReason) = 0;  /**< retrieve fatal error - messages */
    private:
      ErrorHandler( ErrorHandler const & o);
      ErrorHandler & operator=( ErrorHandler const & o);

    protected:
    };
  }

タイプマップを GvJNI.java ファイルに追加する方法を知っている人はいますか?

4

0 に答える 0