VLAX类调用请教!!!
下面程序为什么总在Class_Initialize中语句:(cad2000)
Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
发生错误呢?
(把
Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
改成
Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.15")
也不行)
'''''''''''''''''''''''''''''''''''''''
Sub test()
Dim acaddoc As AcadDocument
Set acaddoc = ThisDrawing
Dim entry As AcadEntity
Dim pp As Variant
acaddoc.Utility.GetEntity entry, pp, "select a polyline"
MsgBox GetCurveLength(entry)
End Sub
Public Function GetCurveLength(curve As AcadEntity) As Double
Dim obj As VLAX, retval
Set obj = New VLAX
obj.EvalLispExpression "(setq curve (handent " & Chr(34) & curve.Handle & Chr(34) & "))"
obj.EvalLispExpression "(setq curvelength (vlax-curve-getDistAtParam curve " & "(vlax-curve-getEndParam curve)))"
retval = obj.GetLispSymbol("curvelength")
obj.NullifySymbol "curve", "curvelength"
Set obj = Nothing
GetCurveLength = CDbl(retval)
End Function 把VL.Application.1中的".1" 去掉试试。 也不行,我得vlax类是下载中心下载的 那可能是VL.Application控件还没注册好。
你看看AutoCAD目录下有没有象vl*.tlb的文件,如果有就使用注册功能把它注册了。 我的cad目录下就又VL.tlb,
用下面注册了也还是不行:
Private Sub Command1_Click()
AutoRegFile ("c:\R2000\vl.tlb")
End Sub
Function AutoRegFile(FileName As String)
Dim reged As Boolean
Dim RegFile1 As String
Dim RegFile2 As String
Dim BeReg As String
Dim RetVal
BeReg = Dir(FileName)
If BeReg <> "" Then
RegFile1 = Environ("windir") & "\system\regsvr32.exe "
RegFile2 = Environ("windir") & "\system32\regsvr32.exe "
If Dir(RegFile1) <> "" Or Dir(RegFile2) <> "" Then
If Dir(RegFile1) <> "" Then
RegFile1 = RegFile1 & "/s" & " " & BeReg
RetVal = Shell(RegFile1, 1)
Else
RegFile2 = RegFile2 & "/s" & " " & BeReg
RetVal = Shell(RegFile2, 1)
End If
Else
MsgBox "找不到regsvr32.exe文件,你可能无法使用本软件!", vbCritical, "无法自动注册控件"
End If
Else
MsgBox "找不到控件文件!", vbCritical, "无法自动注册控件"
End If
End Function 发生错误的提示是什么? 应该是没有加载的缘故吧。如果没有启动VL,它不是会自动加载的。
在VBA中可以使用SendCommand "(vl-load-com)",先试试,如果不行的话再查看看代码的原因吧。还有引用的是:R2000使用VL.Application.1,而R2004使用VL.Application.16,不要搞混了。 发生错误的提示是:
实时错误‘-2147221164(80040154)
用SendCommand "(vl-load-com)"解决了,谢谢mccad版主 和efan2000 版主的热心帮助 还有一个问题想请教,如果我在VB里面调用vlax类时,由于Class_Initialize事件中要用到ThisDrawing,我在VB里面定义了acaddoc全局变量,把类的ThisDrawing替换承acaddoc也不行,请问有什么办法可以让vlax也可以在vb里面调用吗? 全局变量只有在模块中定义的才有效。
不过最好的还是增加一个赋值的过程,将初始化的设置放入这个过程。
如:
Public Property Set Application(ByVal vData As AcadApplication)
On Error GoTo ErrTrap
Set VL = vData.GetInterfaceObject("VL.Application.16")
Set VLF = VL.ActiveDocument.Functions
Exit Property
ErrTrap:
On Error GoTo 0
End Property
Private Sub Class_Initialize()
End Sub
使用时,先创建类,然后再set vlax.Application=acaddoc.application,完成接口,接着就可以使用其中的函数了。
页:
[1]
2