谢谢你的回复。一些附加信息。。
卡德利普。lisp是一个自定义COM对象,我们编写它来访问我们的自定义COM对象。net程序集,该程序集与我们的数据库进行通信。
我们使用以下代码加载dll
-
- (DEFUN load-cadlisp (/ server)
- (PROGN (VL-LOAD-COM)
- (SETQ server (CoGetClassServer cl:progid))
- (IF (NOT server)
- (ALERT "Error: no good")
- (PROGN (VLAX-IMPORT-TYPE-LIBRARY
- :TLB-FILENAME
- Server
- :METHODS-PREFIX
- cl:prefix
- :PROPERTIES-PREFIX
- cl:prefix
- :CONSTANTS-PREFIX
- (STRCAT ":" cl:prefix)
- )
- );_Progn
- );_if
- );_Progn
- );_DEFUN load-cadlisp
- (DEFUN CoGetClassServer (progid) (CoGetClassProperty progid "InprocServer32")) ;_DEFUN CoGetClassServer
- (DEFUN CoGetClassProperty (ProgID property / clsid)
- (IF (SETQ clsid (ProgID->CLSID ProgID))
- (VL-REGISTRY-READ
- (STRCAT "HKEY_CLASSES_ROOT\\WOW6432NODE\\CLSID\" clsid "\" property)
- )
- )
- ) ;_DEFUN CoGetClassProperty
- (DEFUN ProgID->CLSID (ProgID)
- (VL-REGISTRY-READ (STRCAT "HKEY_CLASSES_ROOT\" progid "[url="file://clsid/"]\\CLSID[/url]"))
- ) ;_DEFUN ProgID->CLSID
- ;; load cadlisp DLL
dll中有许多函数,如下所示
-
- (DEFUN GetAPNameOverride (corpnum indx)
- (SETQ obj (VLA-GETINTERFACEOBJECT (VLAX-GET-ACAD-OBJECT) cl:progid))
- (SETQ res (ap-GetAPNameOverride obj corpnum indx)) ;_res NameOverride
- ) ;_defun GetAPNameOverride
对于我们新的64位机器,在添加了
WOW6432节点到注册表路径。
然而,功能在
-
- (SETQ obj (VLA-GETINTERFACEOBJECT (VLAX-GET-ACAD-OBJECT) cl:progid))
在过去的一两年里,我们的32位环境中已经有很多这样的函数。但现在在新的64位机器上,它正在失败。(正如我之前所说,COM包装器(Cadlisp)在vb脚本中运行良好)我猜测这与64位Acad加载32位Dll有关,但我不确定这一切是如何工作的。有什么想法吗?
顺便说一句,我们确实试过了
这也失败了
再次提前感谢 |