乐筑天下

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

从vb/a调用arx函数

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-20 05:29:15 | 显示全部楼层 |阅读模式
大家好,
我想从vb或vba调用arx函数,并将对象ID或句柄数组作为参数传递,这是可能的还是有其他方法可以做到这一点
  1. 'create the dll function def:
  2. Private Declare Function MoveObjects Lib _
  3.     "C:\\Dev\\test.arx" Alias "DCSMoveObjects" (ByRef ids() As Variant)
  4. Public Sub ArxSubTest()
  5. Dim Ent As AcadEntity
  6. Dim ssetObj As AcadSelectionSet
  7. Dim ids(100) As Variant 'this will need a ReDim or similar
  8. Dim i As Integer
  9. On Error Resume Next
  10. thisdrawing.SelectionSets("prev").Delete
  11. Set ssetObj = thisdrawing.SelectionSets.Add("prev")
  12. ssetObj.SelectOnScreen
  13. For Each Ent In ssetObj
  14.      ids(i) = Ent.ObjectId
  15.      i = i+1
  16. Next
  17. 'dump 'em:
  18. MoveObjects ids
  19. End Sub

并且arx函数sig是-
无效的DCSMoveObjects(ACDBObjectDarray*ids)
-和从arx(dll)导出,并带有测试功能。可以在没有参数的情况下调用,但这对我的需要不是很有用,仅用于测试。
谢谢。
Mick。
。另外,我知道我可以在arx中进行sset,但我可能需要从用户选择以外的其他来源获取id。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-20 07:27:41 | 显示全部楼层
你能让ARX函数暴露在lisp中,然后通过VBA评估lisp吗?呵呵。Luis对com的东西越来越在行了,也许他能帮忙
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-20 08:35:33 | 显示全部楼层
Mick,
这是来自我很久以前写的东西,我看起来像是把它实现为ATL类的(尽管这不是我记得它的方式),但它可能会给你一些关于如何处理数组的线索。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-20 10:48:44 | 显示全部楼层

我也许,今天晚些时候可以写一些东西(在ATL中,但我看到查克已经发布了一些东西)让我知道....但是今天,我刚刚开始我的新工作,所以我将只是阅读这里发生的事情。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-20 16:27:11 | 显示全部楼层
谢谢伙计们。
Chuck,我稍后会吸收它,我真的在努力避免COM,因为我稍后可能会遇到64位问题,但据我所知,我仍然可以从vb/a调用dll...但我只是推测
最坏的情况下,我会将id的/句柄写入文件并从arx打开它,这应该可以避免这些问题。
干杯,
米克。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-21 09:43:11 | 显示全部楼层

你好,Mick,
这里是一个示例,有两个函数,如果您需要Visual Studio ATL解决方案示例,请告诉我。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-21 16:13:57 | 显示全部楼层
谢谢Luis。
我可以将ATL对象添加到我的arx项目中以使其正常工作吗?或者我需要为带有idl文件的COM接口设置一个新项目吗?
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-21 16:26:12 | 显示全部楼层

这是我所做的,以防万一...
为此,我从来没有能够使用arx向导,我使用VS->添加类->ATL简单对象->用类名填写表单->在支持下选择ISupportErrorInfo
然后,arx向导(对我来说)也不能添加任何新方法,所以我简单地转到IDispati下的idl文件an我将我的方法调用-手动(就像我也为我的函数调用所做的那样-我之前示例中的那些):
  1. [id(1), helpstring("method GbPolySS")]
  2. HRESULT GbPolySS([in] VARIANT ids, [in] BSTR LayerName, [in] BSTR LayerNameOut, [in] double dtol, [in] short poltip, [in] double areamin, [in] short inpol, [in] short outpol, [in] short dirpolhor, [out] VARIANT *objids);
  3. [id(2), helpstring("method GbPolyPT")]
  4. HRESULT GbPolyPT([in] VARIANT pt, [in] BSTR LayerName, [in] double dtol, [in] short poltip, [in] double areamin, [in] short dirpolhor, [out] LONG *objid);

我想就是这样,(来自内存)......
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-21 16:35:56 | 显示全部楼层
谢谢路易斯,我会试一试的。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2009-4-21 21:51:05 | 显示全部楼层
谢谢先生们,我用一个ATL对象很好地工作了,这个对象是我在创建了启用了COM的项目之后添加的。干杯,米克。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-2 06:07 , Processed in 0.975925 second(s), 73 queries .

© 2020-2025 乐筑天下

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