8

C プログラムで perl ルーチンを呼び出す必要があります。perl ルーチンは次の引数を取ります:$a, $b, $cとは整数、は文字列 (バイナリ文字を含む場合があります) です$aperlcallによると、呼び出しを行う手段は次のとおりです。$b$c

I32 call_sv(SV* sv, I32 flags);
I32 call_pv(char *subname, I32 flags);
I32 call_method(char *methname, I32 flags);
I32 call_argv(char *subname, I32 flags, char **argv);

call_argv(...)しか使えないようですが、2つ質問があります

  • perl ルーチンに整数を渡す方法
  • (バイナリ) 文字列を perl に渡すにはどうすればよいですか?

のような機能があればいいのに

I32 call_argv(char *subname, I32 flags, int numOfArgs, SV* a, SV* b, SV *c ...);
4

1 に答える 1

8

perlcall のパラメーターの受け渡しセクションを参照してください。引数は Perl スタックにプッシュされます。call_argv文字列以外のものを渡す場合は役に立ちません。呼び出し規約は次のようになります

PUSHMARK(SP);
mPUSHi(some_integer);
mPUSHp(binary_data, len);
XPUSHs(some_SV_I_had_laying_around);
PUTBACK;
call_pv("sub_name", G_DISCARD);

またはcall_sv、 にサブネームがある場合に使用したり、オブジェクトの名前でメソッドを呼び出しSV*たりすることができます。call_method

サブルーチンが 1 つまたは複数の値を返す場合は、G_SCALARまたはでそれを呼び出しG_ARRAYPOPマクロを使用して戻り値にアクセスできます。これについては、次の 2 つのセクションで詳しく説明します。を忘れないでくださいSPAGAIN

于 2014-04-11T16:47:23.310 に答える