本帖最后由 yxp 于 2019-1-11 12:59 编辑
老哥哥,你这是32位的CAD系统吗?能不能看看你的 c:ttt 函数在64位CAD里的编码是否一致,以下16个字节一组。
E860E6E9FB7F0000 0000000000000000
58424A3100000000 38EB633100000000
0000000000000000 E860E6E9FB7F0000
0200000000000000 1021663100000000
88EB633100000000 0000000000000000
E860E6E9FB7F0000 0200000000000000
以下lisp函数可以检查某个指定lisp在内存里的数据
调用: (getmem c:ttt 76 8) 表示要查询 c:ttt 函数 76 个字节,每 8 个字节一组:
内存查询函数源码如下:
 - (defun getmem (cm size sec / hex ss m n sum) (defun isACAD64 ()
- (= 17(strlen(vl-prin1-to-string
- (cadr (read (strcat "(" (vl-prin1-to-string +) ")"))))))
- )
- (setq hex '(("F" . 15)("E" . 14)("D" . 13)("C" . 12)("B" . 11)
- ("A" . 10)("9" . 9)("8" . 8)("7" . 7)("6" . 6)("5" . 5)
- ("4" . 4)("3" . 3)("2" . 2)("1" . 1)("0" . 0)))
- (if (= 'SUBR (type cm))(progn
- (setq ss (substr (vl-prin1-to-string cm) 9 (if (isACAD64) 16 8))
- ss (strcase ss)
- n (strlen ss)
- m 0 sum 0)
- (while (> n 0)
- (setq sum (+ (* (cdr (assoc (substr ss n 1) hex)) (expt 16 m)) sum)
- n (1- n) m (1+ m)))
- (setq dwx (vlax-get-or-create-object "DynamicWrapperX"))
- (vlax-invoke DWX 'MemRead sum size sec)
- )
- )
- )
|