えんどう
yasuy****@javao*****
2004年 1月 25日 (日) 18:19:58 JST
えんどうです。 >Cの構造体をSchemeに見せる方法としては、ext/fcntlにおける<sys-flock>の >実装や、ext/termiosにおける<sys-termios>の実装を参考にしてください。 >いずれもdefine-cclassは使わず、C側だけで処理しています。 fcntl.c では Scm_Init_fcntl 関数で、 Scm_InitBuiltinClass(&Scm_SysFlockClass, "<sys-flock>", flock_slots, sizeof(ScmSysFlock), mod); <sys-flock> クラスを登録し、初期化では、 static ScmObj flock_allocate(ScmClass *klass, ScmObj initargs) { ScmSysFlock *f = SCM_NEW(ScmSysFlock); SCM_SET_CLASS(f, SCM_CLASS_SYS_FLOCK); memset(&f->lock, sizeof(f->lock), 0); return SCM_OBJ(f); } を行っているのですね。 ScmSysFlock 型がどこにも定義されていないように見えるのですが、 この型はどう定義されるのでしょうか...? > $ gosh -I. > gosh> (dynamic-load "mysql") > #t > gosh> (d <mysql-handle>) > *** ERROR: unbound variable: <mysql-handle> > Stack Trace: > _______________________________________ > gosh> (d <mysql-res>) > *** ERROR: unbound variable: <mysql-res> > Stack Trace: > _______________________________________ > >これは、<mysql-handle>等が定義されてるモジュールをimportしてないだけ、 >もしくはそのモジュールから<mysql-handle>がexportされていないだけ、 >とかいう可能性はありますか? <mysql-handle> の定義は mysql.so にあるので、 mysql.so を dynamic-load すれば<mysql-handle> が Gauche 側に見えると 思っていたのですが、 そうではなく何らかのモジュールで mysql.so を dynamic-load し、 そのモジュールで <mysql-handle> を export する必要がある、 ということなのでしょうか...? dbd.mysql モジュールを書き、その中で (dynamic-load "mysql")を行い、 <mysql-handle> をexportしてみました。 mysql.so があるディレクトリーで gosh -I. で Gauche を起動し、 (use dbd.mysql) のあと (d <mysql-handle>) を試してみました。 $ gosh -I. gosh> (add-load-path "/home/yasuyuki/kahua/dbi") ("/home/yasuyuki/kahua/dbi" "/home/yasuyuki/kahua/dbd" "." "/usr/local/ share/gauche/site/lib" "/usr/local/share/gauche/0.7.3/lib") gosh> (use dbd.mysql) (#<module dbd.mysql> #<module gauche.interactive>) gosh> (d <mysql-handle>) *** ERROR: unbound variable: <mysql-handle> Stack Trace: _______________________________________ dbd.mysql モジュールでは (dynamic-load "mysql") だけではダメで、 何か別の定義が必要なのでしょうか...? -- ENDO Yasuyuki <yasuy****@javao*****> http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only) http://www.javaopen.org/jfriends/ (Japanese Only)