topirol 发表于 2003-9-29 21:16:00

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

mccad 发表于 2003-9-29 21:18:00

把VL.Application.1中的".1" 去掉试试。

topirol 发表于 2003-9-29 21:19:00

也不行,我得vlax类是下载中心下载的

mccad 发表于 2003-9-29 21:23:00

那可能是VL.Application控件还没注册好。
你看看AutoCAD目录下有没有象vl*.tlb的文件,如果有就使用注册功能把它注册了。

topirol 发表于 2003-9-29 21:35:00

我的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

mccad 发表于 2003-9-30 19:06:00

发生错误的提示是什么?

efan2000 发表于 2003-9-30 19:40:00

应该是没有加载的缘故吧。如果没有启动VL,它不是会自动加载的。
在VBA中可以使用SendCommand "(vl-load-com)",先试试,如果不行的话再查看看代码的原因吧。还有引用的是:R2000使用VL.Application.1,而R2004使用VL.Application.16,不要搞混了。

topirol 发表于 2003-10-1 12:04:00

发生错误的提示是:
实时错误‘-2147221164(80040154)

用SendCommand "(vl-load-com)"解决了,谢谢mccad版主 和efan2000 版主的热心帮助

topirol 发表于 2003-10-1 12:19:00

还有一个问题想请教,如果我在VB里面调用vlax类时,由于Class_Initialize事件中要用到ThisDrawing,我在VB里面定义了acaddoc全局变量,把类的ThisDrawing替换承acaddoc也不行,请问有什么办法可以让vlax也可以在vb里面调用吗?

efan2000 发表于 2003-10-1 13:06:00

全局变量只有在模块中定义的才有效。
不过最好的还是增加一个赋值的过程,将初始化的设置放入这个过程。
如:

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
查看完整版本: VLAX类调用请教!!!