从vb/a调用arx函数
大家好,我想从vb或vba调用arx函数,并将对象ID或句柄数组作为参数传递,这是可能的还是有其他方法可以做到这一点
'create the dll function def:
Private Declare Function MoveObjects Lib _
"C:\\Dev\\test.arx" Alias "DCSMoveObjects" (ByRef ids() As Variant)
Public Sub ArxSubTest()
Dim Ent As AcadEntity
Dim ssetObj As AcadSelectionSet
Dim ids(100) As Variant 'this will need a ReDim or similar
Dim i As Integer
On Error Resume Next
thisdrawing.SelectionSets("prev").Delete
Set ssetObj = thisdrawing.SelectionSets.Add("prev")
ssetObj.SelectOnScreen
For Each Ent In ssetObj
ids(i) = Ent.ObjectId
i = i+1
Next
'dump 'em:
MoveObjects ids
End Sub
并且arx函数sig是-
无效的DCSMoveObjects(ACDBObjectDarray*ids)
-和从arx(dll)导出,并带有测试功能。可以在没有参数的情况下调用,但这对我的需要不是很有用,仅用于测试。
谢谢。
Mick。
。另外,我知道我可以在arx中进行sset,但我可能需要从用户选择以外的其他来源获取id。
**** Hidden Message ***** 你能让ARX函数暴露在lisp中,然后通过VBA评估lisp吗?呵呵。Luis对com的东西越来越在行了,也许他能帮忙 Mick,
这是来自我很久以前写的东西,我看起来像是把它实现为ATL类的(尽管这不是我记得它的方式),但它可能会给你一些关于如何处理数组的线索。
我也许,今天晚些时候可以写一些东西(在ATL中,但我看到查克已经发布了一些东西)让我知道....但是今天,我刚刚开始我的新工作,所以我将只是阅读这里发生的事情。 谢谢伙计们。
Chuck,我稍后会吸收它,我真的在努力避免COM,因为我稍后可能会遇到64位问题,但据我所知,我仍然可以从vb/a调用dll...但我只是推测
最坏的情况下,我会将id的/句柄写入文件并从arx打开它,这应该可以避免这些问题。
干杯,
米克。
你好,Mick,
这里是一个示例,有两个函数,如果您需要Visual Studio ATL解决方案示例,请告诉我。 谢谢Luis。
我可以将ATL对象添加到我的arx项目中以使其正常工作吗?或者我需要为带有idl文件的COM接口设置一个新项目吗?
这是我所做的,以防万一...
为此,我从来没有能够使用arx向导,我使用VS->添加类->ATL简单对象->用类名填写表单->在支持下选择ISupportErrorInfo
然后,arx向导(对我来说)也不能添加任何新方法,所以我简单地转到IDispati下的idl文件an我将我的方法调用-手动(就像我也为我的函数调用所做的那样-我之前示例中的那些):
HRESULT GbPolySS( VARIANT ids, BSTR LayerName, BSTR LayerNameOut, double dtol, short poltip, double areamin, short inpol, short outpol, short dirpolhor, VARIANT *objids);
HRESULT GbPolyPT( VARIANT pt, BSTR LayerName, double dtol, short poltip, double areamin, short dirpolhor, LONG *objid);
我想就是这样,(来自内存)...... 谢谢路易斯,我会试一试的。 谢谢先生们,我用一个ATL对象很好地工作了,这个对象是我在创建了启用了COM的项目之后添加的。干杯,米克。
页:
[1]