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

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



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

Index Home