如何通过LSP 语言查看系统是64位还是32位
如何通过LSP 语言查看系统是64位还是32位感谢
doslib 里有一个现成的
dos_isacad64
Determines if the version of AutoCAD that DOSLib is currently running in is a 64-bit version of AutoCAD.
--------------------------------------------------------------------------------
Syntax
(dos_isacad64)
Parameters
n/a
Returns
T if AutoCAD is a 64-bit version.
nil otherwise.
Example
Command: (dos_isacad64)
nil
(strlen (VL-PRINC-TO-STRING +))
可以根据这个两个数值的不同来判断,如果返回27,是64位,否则32位。 如何在LSP中实现,楼上的太高深,没看明白,不好意思 highflybir 发表于 2012-10-19 10:02 static/image/common/back.gif
(strlen (VL-PRINC-TO-STRING +))
可以根据这个两个数值的不同来判断,如果返回27,是64位,否则32位。
多谢,多谢 本帖最后由 highflybir 于 2012-10-19 10:30 编辑
朽木大师 发表于 2012-10-19 10:02 static/image/common/back.gif
如何在LSP中实现,楼上的太高深,没看明白,不好意思
例如:_$ (VL-PRINC-TO-STRING +)
"#<SUBR @0000000030940b68 +>"
中间的数值部分,是这个函数的指针,所以如果是32位的,只是8位十六进制数值,64位的,则为16位数值,因此可以根据这个数值来得到CAD的是64位还是32位的。
但是操作系统的位数跟CAD的位数并不一定相同。
如果要得到操作系统位数,可以如下办法:
(vl-load-com)
(defun C:SYS (/ WMI SVR SYS)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator"))
(setq SVR (vlax-invoke WMI 'ConnectServer))
(setq SYS (vlax-invoke SVR 'ExecQuery "Select * from Win32_ComputerSystem" nil 48))
(vlax-for item SYS
(princ (vlax-get item 'SystemType))
)
(vlax-release-object SYS)
(vlax-release-object SVR)
(vlax-release-object WMI)
(princ)
)
(VL-PRINC-TO-STRING +)
32位 XP 返回 "#<SUBR @05f4f778 +>" 类似的内容
其中05f4f778应该是函数“+”的16进制地址每个16进制数对应的位数为4位所以上述返回的是32位地址 对应的CAD也是32位的
相应的当系统为64位时 返回的地址应该是 64÷4=16位字符 加上前后的字符串 正好27位字符 多谢,多谢,已明白 刚好我正要此功能!
页:
[1]