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

[xyzzy:01854] 関数名の修飾について質問



xyzzy-MLのみなさん、こんにちわ。

vector.co.jpにftpをしてくれるフリーのDLLを見つけたのと、xyzzyからDLLを呼び出
す方法に興味があったので、コネクトしてディスコネクトするだけならすぐできるだ
ろうと思い、仕事中にもかかわらず、マクロしはじめてしまいました。今思えば、や
めておけばよかったです。

使用したDLLは「同期型FTPクライアントDLL Ver1.0」というsuekane@xxxxxxxxxxxx様
が公開されたものです。わたしが今日呼んでみたのはその内の3つの関数です。

INT     WINAPI  FtpConnect( LPCSTR lpcIpAddr, LPCSTR lpcUser, LPCSTR
lpcPass );
INT     WINAPI  FtpDisconnect( VOID );
INT     WINAPI  FtpGetCDURL( LPSTR lpDir );

下記は、わたしがちょっとだけと思って書いたソースです。ホントにちょっとだけで
おはずかしいのですが、根がにぶいせいか半日ぐらいつぶしてしまいました。

(eval-when (:compile-toplevel :load-toplevel :execute)
  (require "foreign"))

(c:define-dll-entry c:int FtpConnect ((c:char *)(c:char *)(c:char *))
"FtpCnt")
(c:define-dll-entry c:int FtpDisconnect () "FtpCnt")
(c:define-dll-entry c:int FtpGetCDURL ((char *)) "FtpCnt")
(defun go-ftp ()
  (let ((ip-addr-cstring (si:make-string-chunk "<サーバーのアドレス>"))
 (user-cstring (si:make-string-chunk "<ユーザー名>"))
 (pass-cstring (si:make-string-chunk "<パスワード>"))
 (my-dir-cstring (si:make-chunk nil 256)))
    (if (FtpConnect ip-addr-cstring user-cstring pass-cstring)
 (progn
   (msgbox "OK")
   (if (FtpGetCDURL my-dir-cstring)
       (msgbox (si:unpack-string my-dir-cstring 0))
   )
   (FtpDisconnect)
 )
      (msgbox "NG")
    )
  )
)

Pascal感覚でカッコだけの行が多い上に、前置きが長くなってすいません。やっと質
問にたどりつけました。

さて質問です。

●特定の関数名の前についている「si:」とか「c:」とかいう修飾子は何でしょう
か。
●パッケージという概念に関係があるんだと思いますが、どの関数の頭に何がつくの
かというのはどこを見ればわかるんでしょうか。

これだけわかったらLispの基礎から勉強しますので、(開いたことはありませんが、
ELispの本は2,3冊持っています。)、教えて下さい。よろしくお願いします。

大橋弘靖 <hohasi@xxxxxxxxxxxxxxxx>

Index Home