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

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



皆様こんにちは。OHKUBO Hiroshi です。

ひょんなことから、フォントリストの一覧を取得しようとしているのですが、
慣れないことをしているためあっさりとつまってしまいました。


現在 win32api の EnumFontFamiliesEx 関数から呼び出される
EnumFontFamExProc コールバック関数でフォント一覧を取得しようとしています。
行いたいことの C と lisp での対応は以下の通りです。

------------------------------------------------------------
int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe,
                               NEWTEXTMETRICEX *lpntme,
                               int FontType,
                               LPARAM lParam) {
  printf("%s\n", lpelfe->elfLogFont.lfFaceName)
  return TRUE;
}
------------------------------------------------------------
(in-package "win-user")
(defun-c-callable int enum-font-fam-ex-proc
  (((ENUMLOGFONTEX *) lpelfe) ((NEWTEXTMETRICEX *) lpntme) (int FontType) (LPARAM lParam))
  (format t "~S~%" "?????");; <-
  (return-from enum-font-fam-ex-proc 1))
------------------------------------------------------------

教えていただきたいことは、lpelfe->elfLogFont に対応するコードをどのように
lisp で記述するかということです。
si::address-of 関数で chunk から対応するアドレスを取得できるようですが、
アドレスから chunk を作成するにはどうすればよいか、直感だけでは
たどり着けませんでした。(^^;;

ご指導の程宜しくお願いいたします。

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

Index Home