🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.perl
Article #83

XS と可変長引数

#83
From: Tadashi Matsumoto(松本 匡史)
Date: Tue, 17 Feb 1998 00:00
47 lines
2224 bytes
松本@日興システムセンターと申します。

Perl5 の XS を使って、ある C ライブラリとのインターフェースとなる
モジュールを作成しています。
そこで可変長引数が使われているのですが、perl から可変長引数を
受け取って C の可変長引数の関数をよびだす方法がよくわかりません。

.xs ファイルで
-------------------------------
MODULE = Tib            PACKAGE = Tib

Tib_Errorcode
Initialize()
    CODE:
    {
        RETVAL = Tib_Initialize(TIB_PROPERTY_EOA);
    }
    OUTPUT:
    RETVAL

--------------------------------
というような感じでやるんだと思うんですが、

C での関数定義は、
Tib_Errorcode Tib_Initialize ( Tib_Property property , ... )

※ Tib_Errorcode, Tib_Property は enum です。

なので、本当は可変長引数を取りたいのです。
# perl 側で可変長引数をとって C 側を可変長引数で呼び出したい。

「新 Perl の国へようこそ」の 12.6 に可変長引数の項はあるのですが、
これは perl 関数で可変長引数をとって、
C の"固定長引数"の関数を呼び出す方法のようです。

comp.lang.c A to FAQ には、
| 15.13:  実行時に、引数リストをつくって関数を呼び出すことができるか。
| 
| A:      動くことが保証される方法も移植性の高い方法もない。

とあるので見通し暗い気もします。

どなたかうまいやり方をご存知ないでしょうか?

--
松本匡史@日興システムセンター tadashi@sso.nsc.nikko.co.jp
Technical Details
Message-ID: <6cbfvn$nki@melon.sso.nsc.nikko.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 1043e7,bd18d32ce1cb4e3c,start
X-Google-Attributes: gid1043e7,public
X-Google-Thread: 106434,bd18d32ce1cb4e3c,start
X-Google-Attributes: gid106434,public
From: tadashi@sso.nsc.nikko.co.jp (Tadashi Matsumoto(松本 匡史))
Subject: XS と可変長引数
Date: 1998/02/17
Message-ID: <6cbfvn$nki@melon.sso.nsc.nikko.co.jp>
X-Deja-AN: 325806386
Distribution: world
X-Nsubject: XS $B$H(B $B2DJQD90z?t(B
Content-Type: text/plain; charset=ISO-2022-JP
Organization: The Nikko System Center Ltd. Japan
Mime-Version: 1.0
Newsgroups: fj.lang.perl,fj.lang.c