[xyzzy:08735] Re: address 参照の解決について
- Subject: [xyzzy:08735] Re: address 参照の解決について
- From: OHKUBO Hiroshi <konata@xxxxxxxxxxxxx>
- X-mailer: EdMax Ver2.85.3F
ABE Hiroshiさん、おつきあいありがとうございます。
OHKUBO Hiroshi です。
Date: Wed, 26 Mar 2003 23:05:48 +0900 の
Subject: [xyzzy:08728] Re: address 参照の解決について
Message-Id: <20030326230550.kamail.aGlyby1hYmU=@xxxxxxxxxxxxxxxxxx>
への返事です。
> 全然うまくないのですが kernel32.dll にある RtlMoveMemory を呼び出して
> | (in-package "foreign")
> | (define-dll-entry void memmove ((void *) (void *) u_int) "kernel32" "RtlMoveMemory")
> | (defun name-of (lpelfe)
> | (declare (type integer lpelfe))
> | (let ((chunk (make-chunk 'void 128)))
> | (memmove (address-of chunk) (+ lpelfe OFFSET) 128))
> | (si::unpack-string chunk 0)))
> とすればいけるんじゃないかと思います。
指針ありがとうございます。
(defun test ()
(let ((chunk-src (si:make-string-chunk "abcde"))
(chunk-dst (si:make-string-chunk " ")))
(winapi::RtlMoveMemory (si:chunk-data chunk-dst) (si:chunk-data chunk-src)
(si:chunk-size chunk-src))
(format t "dst: ~S~%" (si:unpack-string chunk-dst 0 6))
(format t "src: ~S~%" (si:unpack-string chunk-src 0 6))))
とやって、アドレス指定によりメモリ内容をコピーできることを確認しました。
しかし、本来やりたい部分はなかなかうまくいかず、xyzzy に
Access violation を返されてばかりいます。
もう少しぼちぼちやってみようと思います。
ありがとうございました。
# RtlCopyMemory が C の標準関数 memcpy へマッピングされているのに
# しばらくはまってました (^^;;
---
OHKUBO Hiroshi
konata@xxxxxxxxxxxxx
http://members.tripod.co.jp/ohkubo/index.html