※ ここではFreeBSD 4.10を元に記してあります。
% h2xs -A -n Mytest |
Mytest フォルダが作成され、
Mytest.pm、Mytest.xs、Makefile.PL、test.pl、Changes、MANIFEST ファイルが
生成される。
#include "EXTERN.h" #include "perl.h" #include "XSUB.h"
MODULE = Mytest PACKAGE = Mytest
|
% perl Makefile.PL |
% make |
#!/usr/local/bin/perl use ExtUtils::testlib; use Mytest; Mytest::hello(); Mytest::my_func(10, "abc"); |
※ make環境以外で実行するには、生成された Mytest.pm、Mytest.so が
インストールされているか、カレントに必要です。
〜 ヒント集 〜
・C関数から数値以外の情報を返したい。
1つの数値ならリターン値で返せば済みますが、例えば文字列を生成してそれをPerl側で得るにはどうすればよいでしょうか?
(1)モジュール関数の引数に「 char* 」を追加する。
ここには格納に必要なバッファ領域が設定されると仮定する。
この方法を利用する上で、その他の文字列渡しを「 const char* 」としておけば見分けやすくなると思います。
(2)Cソース側でバッファに生成した文字列を格納する。
パラメータチェックでバッファ文字列の長さをチェックしてから格納すること。
(3)呼び出す側(Perl)で下記のように変数を用意してパラメータとして渡す。
my $buff = " \0"; # スペース文字10個と\0。10Byte分の文字列を格納できるバッファ
※ この方法はPerl側の文字列領域を「書き換える」ことで実現します。
文字コード等で1文字のバイトサイズが違うことに注意してください。
Copyright(C) RainyLain 2000, 2005