5

私は C++ をほとんど知らないので、それは役に立たず、私の XS はあまり良くありません。C++ ライブラリ用の XS インターフェイスを作成していますが、1 つを除いてほとんどすべてのメソッドが機能しています。

Perl のメソッドは次のようになります。

$return_data = $obj->readPath( $path );

メソッドは、次の .h ファイルとして定義されます。

int readPath(const char* path, char* &buffer, bool flag=true);

「バッファ」は、NULL で渡された場合に割り当てられます。

署名が異なる readPath の 2 つの追加バージョンがありますが、それらは私が必要とするものではありません。(興味深いことに、コンパイルしようとすると、「候補」が不要な2つであることがわかります。)それは、「char * &」を理解していないためですか?

私が書く必要がある xsub を手伝ってくれる人はいますか?

Perl 5.14.2 を使用しています。

ところで -- T_IV には typemap "long long int" も使用しました。long long を正しく typemap する方法に関するドキュメントが見つかりません。long long をタイプマップする方法について何か提案はありますか?

ありがとう、

4

2 に答える 2

3

私は C や XS から C++ を扱ったことはありません。C の場合は、次のようになります。

void
readPath(SV* sv_path)
   PPCODE:
      {
         char*  path   = SvPVbyte_nolen(sv_path, len);
         char*  buffer = NULL;

         if (!readPath(path, &buffer, 0))
            XSRETURN_UNDEF;

         ST(0) = sv_2mortal(newSVpv(buffer, 0));
         free(buffer);

         XSRETURN(1);
      }

うまくいけば、それが機能するか、機能するように調整できます。


私は仮定しました:

  • readPath成功/失敗に対して true/false を返します。
  • buffer失敗時には割り当てられません。
  • のデアロケータはbufferですfree
于 2012-07-22T04:50:33.047 に答える