[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:01988] Re: DLL 定義ファイルの作成について



大橋 さん、こんにちは。逸見 です。

≫以前、「関数名の修飾について質問」で、名前解決についていろいろ教えていただき
≫ながら、またこんな質問をするのは気がひけるのですが。
≫
≫個人的なDLL定義ファイルみたいなものを作っておいて、他の関数から呼び出して使
≫えるようしたいと考えております。
≫
≫例えば、次のような内容の2つのファイルがあるとします。
≫
≫-- a.l の内容 --
≫(eval-when (:compile-toplevel :load-toplevel :execute)
≫  (require "foreign"))
≫;;; <== (あ)
≫(foreign:*define-dll-entry :int16 a-func (:int32) "aaa.dll")
≫--- 以上 --------
≫
≫-- b.l の内容 --
≫;;; <== (い)
≫(define my-func ()
≫   (msgbox (format nil "~d" (a-func 10)))
≫--- 以上 --------
≫
≫このまま b.l を load-fileして my-func を実行しようとしても、シンボル名の解決
≫ができないというのはわかるのですが、では(あ)・(い)の場所に何を入れればよいの
≫か、頭がこんがらがってわかりません。
≫

a.lをC言語でいう共通ヘッダーみたいなのにして、b.l(自作プログラム)
で使うときに #includeみたいにするという意味でしたら、

(あ)には、特に何も書く必要はなくって、(い)にloadなりload-libraryなり
autoloadなりrequireを書けばいいんでなくって?

load               インタープリタでloadする
load-library       *.lcがあればそれをロードする。(なければ*.lをロード)

autoload           関数1つ単位で、呼ばれたときloadするようにする。
                   (呼ばれるまで、loadされないって事)

require            あるライブラリをロードする。
                   windowsのapiがロードされているモジュール"winapi"を
                   ロードする。

*modules*  この変数を見ると、今どのモジュールがロード済かわかる。
            既にロード済だと、もうロードされない。

requireをつかうときには、(あ)にprovideを書いとけばOK.
                                 --> *module*に登録されます。

------------------------------------------------------------
逸見雅人        Email   henmi@xxxxxxxxxxxxx
Right now my favorites of favorites:
 あなたの一番になりたい
 この世で一番大切なもの

Index Home