tfurness 发表于 2022-7-6 07:32:20

64 b上的VLA-GETINTERFACEOBJECT

(SETQ obj(VLA-GETINTERFACEOBJECT(VLAX-GET-ACAD-OBJECT)“CadLisp.Lisp”))
 
我正试图让它在我们新的64位Windows 7机器上运行(Map 2012)。
去年,它在我们现有的XP机器(Map2009)上运行良好。
 
当我运行这个时,我得到以下错误;
(SETQ obj(VLA-GETINTERFACEOBJECT(VLAX-GET-ACAD-OBJECT))CadLisp。Lisp”))
错误:自动化错误。加载应用程序中的问题
 
“CadLisp.Lisp”是一个com对象,使用vb脚本在命令提示符下运行良好。
 
有人有什么建议吗?
 
提前感谢

BlackBox 发表于 2022-7-6 07:41:57

欢迎来到CADTutor!
 
你到底想用Cadlesp做什么。Lisp对象?

irneb 发表于 2022-7-6 07:42:39

如果它在VBScript中运行良好,那么也许可以尝试使用vlax get或create object,这与VBS的CreateObject函数的原理相同。只要确保使用完vlax release对象即可。

BlackBox 发表于 2022-7-6 07:50:10

 
FWIW-
 

_$ (setq obj (vlax-get-or-create-object "CadLisp.Lisp"))
nil

irneb 发表于 2022-7-6 07:53:37

RM,OP确实声明“CadLisp.Lisp”COM对象在vb脚本中为他工作。这意味着它是一些ActiveX/COM程序/库,已经在他的电脑上注册了。我自己也不熟悉这样的程序,我尝试这个时也得到了零回报。但是,如果它在VBS中适用,那么就没有理由不在同一台PC上的Visual Lisp中也适用。

SLW210 发表于 2022-7-6 07:59:33

t燃烧,
 
请阅读代码发布指南,并编辑您的帖子以包含代码标签。

tfurness 发表于 2022-7-6 08:02:55

谢谢你的回复。一些附加信息。。
 
卡德利普。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 "\\CLSID"))
) ;_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有关,但我不确定这一切是如何工作的。有什么想法吗?
 
顺便说一句,我们确实试过了
这也失败了
 
 
 
再次提前感谢

BlackBox 发表于 2022-7-6 08:08:55

 
 
... 听起来你的自定义代码有问题,我想。
 
在更新到Map ObjectARX SDK 2012和/或ObjectARX 2012 SDK引用后,您是否重新编译了程序集,还是仍在引用2009 SDK?

lfe011969 发表于 2022-7-6 08:15:51

我认为RM解决了您的问题-我使用VLA-GETINTERFACEOBJECT的唯一经验是访问模板文件,我遇到的唯一问题是升级到AutoCAD 2013后,旧代码希望与2010文件交互。

BlackBox 发表于 2022-7-6 08:18:09

 
... 2013年增加了一个问题,即增加对AcCoreMgd的引用。dll,作为核心控制台添加到混合中。
页: [1] 2
查看完整版本: 64 b上的VLA-GETINTERFACEOBJECT