As
discussed previously, I believe the
atoi method won't work as the integer conversion functions in AutoLISP are only compatible with 32-bit signed integers and the 64-bit method requires a Long rather than an Int.
This link seems to describe the changes made to the ActiveX API in 2015:
http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-6FEDBCCA-91D0-4782-AE5A-49BD4384FD8CThough, its odd that the
setblocktablerecordid method now accepts either a 32-bit integer or a string for 64-bit systems - certainly, this behaviour is not detailed in the
documentation.
With these changes in mind, and to retain compatibility with earlier 64-bit systems, I would suggest perhaps:
(defun LM:objectid ( obj )
(eval
(list 'defun 'LM:objectid '( obj )
(cond
( (not (wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*64*"))
'(vla-get-objectid obj)
)
( (= 'subr (type vla-get-objectid32))
'(vla-get-objectid32 obj)
)
( (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false))
)
)
)
(LM:objectid obj)
)
(defun LM:acdoc nil
(eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
(LM:acdoc)
)
But unfortunately I don't have access to a 64-bit system for testing.