朽木大师 发表于 2012-10-18 23:26:52

如何通过LSP 语言查看系统是64位还是32位

如何通过LSP 语言查看系统是64位还是32位
感谢

alin 发表于 2012-10-19 09:57:49

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

highflybir 发表于 2012-10-19 10:02:13

(strlen (VL-PRINC-TO-STRING +))
可以根据这个两个数值的不同来判断,如果返回27,是64位,否则32位。

朽木大师 发表于 2012-10-19 10:02:34

如何在LSP中实现,楼上的太高深,没看明白,不好意思

朽木大师 发表于 2012-10-19 10:07:22

highflybir 发表于 2012-10-19 10:02 static/image/common/back.gif
(strlen (VL-PRINC-TO-STRING +))
可以根据这个两个数值的不同来判断,如果返回27,是64位,否则32位。

多谢,多谢

highflybir 发表于 2012-10-19 10:11:27

本帖最后由 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)
)

elitefish 发表于 2012-10-19 10:12:32

(VL-PRINC-TO-STRING +)
32位 XP 返回 "#<SUBR @05f4f778 +>" 类似的内容
其中05f4f778应该是函数“+”的16进制地址每个16进制数对应的位数为4位所以上述返回的是32位地址 对应的CAD也是32位的

相应的当系统为64位时 返回的地址应该是 64÷4=16位字符   加上前后的字符串 正好27位字符

朽木大师 发表于 2012-10-19 10:14:06

多谢,多谢,已明白

xiaotao 发表于 2016-6-3 23:02:57

刚好我正要此功能!
页: [1]
查看完整版本: 如何通过LSP 语言查看系统是64位还是32位