乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 46|回复: 12

[编程交流] 64 b上的VLA-GETINTERFACEOBJECT

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:32:20 | 显示全部楼层 |阅读模式
(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脚本在命令提示符下运行良好。
 
有人有什么建议吗?
 
提前感谢
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:41:57 | 显示全部楼层
欢迎来到CADTutor!
 
你到底想用Cadlesp做什么。Lisp对象?
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:42:39 | 显示全部楼层
如果它在VBScript中运行良好,那么也许可以尝试使用vlax get或create object,这与VBS的CreateObject函数的原理相同。只要确保使用完vlax release对象即可。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:50:10 | 显示全部楼层
 
FWIW-
 
  1. _$ (setq obj (vlax-get-or-create-object "CadLisp.Lisp"))
  2. nil
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:53:37 | 显示全部楼层
RM,OP确实声明“CadLisp.Lisp”COM对象在vb脚本中为他工作。这意味着它是一些ActiveX/COM程序/库,已经在他的电脑上注册了。我自己也不熟悉这样的程序,我尝试这个时也得到了零回报。但是,如果它在VBS中适用,那么就没有理由不在同一台PC上的Visual Lisp中也适用。
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 07:59:33 | 显示全部楼层
t燃烧,
 
请阅读代码发布指南,并编辑您的帖子以包含代码标签。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:02:55 | 显示全部楼层
谢谢你的回复。一些附加信息。。
 
卡德利普。lisp是一个自定义COM对象,我们编写它来访问我们的自定义COM对象。net程序集,该程序集与我们的数据库进行通信。
 
我们使用以下代码加载dll
 
 
  1. (DEFUN load-cadlisp (/ server)
  2.    (PROGN (VL-LOAD-COM)
  3.        (SETQ server (CoGetClassServer cl:progid))
  4.     (IF (NOT server)
  5.         (ALERT "Error: no good")
  6.      (PROGN (VLAX-IMPORT-TYPE-LIBRARY
  7.          :TLB-FILENAME
  8.        Server
  9.        :METHODS-PREFIX
  10.       cl:prefix
  11.       :PROPERTIES-PREFIX
  12.       cl:prefix
  13.      :CONSTANTS-PREFIX
  14.       (STRCAT ":" cl:prefix)
  15.                   )
  16.             );_Progn
  17.           );_if
  18.    );_Progn
  19. );_DEFUN load-cadlisp
  20. (DEFUN CoGetClassServer (progid) (CoGetClassProperty progid "InprocServer32")) ;_DEFUN CoGetClassServer
  21. (DEFUN CoGetClassProperty (ProgID property / clsid)
  22. (IF (SETQ clsid (ProgID->CLSID ProgID))
  23.    (VL-REGISTRY-READ
  24.      (STRCAT "HKEY_CLASSES_ROOT\\WOW6432NODE\\CLSID\" clsid "\" property)
  25.      )
  26.    )
  27. ) ;_DEFUN CoGetClassProperty
  28. (DEFUN ProgID->CLSID (ProgID)
  29. (VL-REGISTRY-READ (STRCAT "HKEY_CLASSES_ROOT\" progid "[url="file://clsid/"]\\CLSID[/url]"))
  30. ) ;_DEFUN ProgID->CLSID
  31. ;; load cadlisp DLL

 
dll中有许多函数,如下所示
 
  1. (DEFUN GetAPNameOverride (corpnum indx)
  2. (SETQ obj (VLA-GETINTERFACEOBJECT (VLAX-GET-ACAD-OBJECT) cl:progid))
  3. (SETQ res (ap-GetAPNameOverride obj corpnum indx)) ;_res NameOverride   
  4. ) ;_defun GetAPNameOverride

 
对于我们新的64位机器,在添加了
WOW6432节点到注册表路径。
 
然而,功能在
  1. (SETQ obj (VLA-GETINTERFACEOBJECT (VLAX-GET-ACAD-OBJECT) cl:progid))

 
在过去的一两年里,我们的32位环境中已经有很多这样的函数。但现在在新的64位机器上,它正在失败。(正如我之前所说,COM包装器(Cadlisp)在vb脚本中运行良好)我猜测这与64位Acad加载32位Dll有关,但我不确定这一切是如何工作的。有什么想法吗?
 
顺便说一句,我们确实试过了
这也失败了
 
 
 
再次提前感谢
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:08:55 | 显示全部楼层
 
 
... 听起来你的自定义代码有问题,我想。
 
在更新到Map ObjectARX SDK 2012和/或ObjectARX 2012 SDK引用后,您是否重新编译了程序集,还是仍在引用2009 SDK?
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 08:15:51 | 显示全部楼层
我认为RM解决了您的问题-我使用VLA-GETINTERFACEOBJECT的唯一经验是访问模板文件,我遇到的唯一问题是升级到AutoCAD 2013后,旧代码希望与2010文件交互。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:18:09 | 显示全部楼层
 
... 2013年增加了一个问题,即增加对AcCoreMgd的引用。dll,作为核心控制台添加到混合中。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 04:46 , Processed in 0.494401 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表