どうやってDLLを使っているのか
と言うメモ。dllを取り込めるって言うけど実際dllを取り込んだようなの作っているのって結構少ない。migemo.lでmigemoのdllをどういう感じで読んでいるのかを見ることに。
;;migemo.l (defvar *migemo-dll* "migemo.dll") (c:define-dll-entry (c:void *) migemo-open-func ((c:char *)) *migemo-dll* "migemo_open")
define-dll-entryの中身は
;;foreign.l (defmacro define-dll-entry (return-type name (&rest args) dll-name &optional export-name) `(defun ,name (&rest args) (setf (symbol-function ',name) (si:make-c-function (si:load-dll-module ,dll-name) ',(or export-name (symbol-name name)) ',(mapcar #'c-argument-type args) ',(c-return-type return-type))) (apply #',name args)))
眺めた感じだとdefine-dll-entryで定義したらdefunにdllの中身を定義できるみたい。si:make-c-functionの引数がよく分からないけど。
si:make-c-function(dllの名前 取り出した関数の名前? 引数 戻り値)
define-dll-entry (return-type name (&rest args) dll-name &optional export-name)
見たいな感じなのかなぁと勝手に思った。