[xyzzy:08734] Re: address 参照の解決について
- Subject: [xyzzy:08734] Re: address 参照の解決について
- From: YAMAMOTO Taizo <ymtz@xxxxxxxxxxxxxxx>
- X-mailer: Datula version 1.51.08 for Windows
こんにちわ、やまもとです。
ABE Hiroshiさんの<20030326230550.kamail.aGlyby1hYmU=@xxxxxxxxxxxxxxxxxx>から
> こんばんは。あべです。
>
>>> 多分 unpack-string を使えば良いのではないかと思います。
>>> | (format t "~S~%" (si::unpack-string lpelfe OFFSET))
>>> てな感じでいけると思います。
>>> OFFSET は構造体(ENUMLOGFONTEX)での efFaceName の相対アドレスです。
>> それももしかしたらと思って試していたのですが、lpelfe が単なるアドレスで
>> chunk でないため、si::unpack-string に「型が違う」と怒られてしまいます。
>
> 嘘ばっかりですみません。僕が書いたプログラムでは自前で make-chunk して
>いたので気付きませんでした。
ちょうどリファレンスでmake-chunkのところに来たので調べてみました。
憶測以外の何者でもないですが、si:address-ofではなく、
si:chunk-dataを使ってみたらどうでしょうか?
;;; foo を作る
(setq foo (si:make-string-chunk "foo"))
=> #<chunk 98046956>
(si:chunk-data foo)
=> 56457736
;;; アドレスと思われる数値から bar を作る
(setq bar (si:make-chunk 'string 10 nil 56457736))
=> #<chunk 98046940>
(si:unpack-string foo 0) => "foo"
(si:unpack-string bar 0) => "foo"
(si:chunk-data foo) => 56457736
(si:chunk-data bar) => 56457736
経験的得られた情報からでは、こんな感じに動いているように見えるの
ですが、どうでしょうか?
┏━━━━┳━━━┓
┃アドレス┃内容 ┃
┣━━━━╋━━━┫
fooの先? ┃56457736┃"foo" ┠←─┐←─┐
┠────╂───┨ │ │
┃... ┃ ┃ │ │
┠────╂───┨ │ │
foo のチャンク┃98046940┃... ┠──┘ │
┠────╂───┨ │
bar のチャンク┃98046956┃... ┠─────┘
┗━━━━┻━━━┛
--
YAMAMOTO Taizo / 山本 泰三
mailto:ymtz@xxxxxxxxxxxxxxx
mailto:yamamoto@xxxxxxxxx
http://www1.odn.ne.jp/ymtz/
http://66mhz.com/