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

[xyzzy:08738] Re: address参照の解決について



こんにちは。OHKUBO Hiroshi です。

        Date: Sat, 29 Mar 2003 16:16:54 +0900 の
        Subject: [xyzzy:08737] Re: address参照の解決について
        Message-Id: <20030329161654?-0tpD@xxxxxxxxxxxxx>
        への返事です。

いろいろ遠回りしましたが、フォントリストを得るためのコールバック関数は
以下コードで動作しました。

    (defun-c-callable int enum-font-fam-ex-proc
      (((ENUMLOGFONTEX *) lpelfe) ((NEWTEXTMETRICEX *) lpntme)
       (int FontType) (LPARAM lParam))
      (let ((enum-log-font-ex (make-ENUMLOGFONTEX)) logfont)
        (RtlMoveMemory (si:chunk-data enum-log-font-ex) lpelfe
                       (si:chunk-size enum-log-font-ex))
        (setq logfont (make-LOGFONT
                       (ENUMLOGFONTEX-elfLogFont enum-log-font-ex) 0))
        (push (si:unpack-string logfont 28) facename-list))
      (return-from enum-font-fam-ex-proc 1))

以下の質問は今回のコードを書くにあたり必要ではなく、
本人が混乱しているため撤回します。
> ところで、SOURCE には nil もしくは chunk を指定できるようですが、
> nil の場合のアドレスの基準値はどこになっているのでしょう?
> 
> また、
> 
>   (defun-c-callable int enum-font-fam-ex-proc
>     (((ENUMLOGFONTEX *) lpelfe) ((NEWTEXTMETRICEX *) lpntme)
>      (int FontType) (LPARAM lParam))
>     ....)
> 
> と返された構造体へのポインタ lpelfe は si:make-chunk の SOURCE で
> nil を指定した場合と同じアドレスの基準値からのオフセットなのでしょうか?


また、構造体のサイズについての下記質問については、
> > (*define-c-struct NEWTEXTMETRIC
> >   ....)
> > と定義した構造体 NEWTEXTMETRIC のサイズを計算するのにいい方法は
> > あるでしょうか?

(let ((enum-log-font-ex (make-ENUMLOGFONTEX)))
  (si:chunk-size enum-log-font-ex))

のコードでいけました。
というかオオボケでしたね。(^^;;

お騒がせいたしました。

---
OHKUBO Hiroshi
konata@xxxxxxxxxxxxx
http://members.tripod.co.jp/ohkubo/index.html

Index Home