<CommandMethod("SMB", CommandFlags.Session)> _
Public Sub SMB(ByVal DwgName As String)
' LAUNCH AUTOCAD & LISP
'Sub Launch_AutoCAD(ByVal DwgName As String)
Dim vAcadApp As AcadApplication
Dim vAcadDoc As AcadDocument
Dim DwgPath As String = "\\\.....
Dim LispPath As String = ".....
Dim My_Lisp As String = "SMBTEST"
Dim Cmd_To_Start_LISP_Program As String = "SMBRUN"
Try
If Process.GetProcessesByName("acad").Length > 0 Then
vAcadApp = GetObject(, "AutoCAD.Application")
Else
'vAcadApp = CreateObject("AutoCAD.Application.20")
vAcadApp = New AcadApplication
End If
vAcadApp.Visible = True
vAcadApp.WindowState = AcWindowState.acMax
vAcadDoc = vAcadApp.Documents.Open(DwgPath & DwgName, True)
vAcadDoc.SendCommand("(load """ & LispPath & My_Lisp & ".lsp"" ""The load failed"") " & Cmd_To_Start_LISP_Program & Chr(13))
Catch ex As System.Exception
Finally
vAcadApp = Nothing
vAcadDoc = Nothing
End Try
End Sub
您已经编写了一个CommandMethod方法(一个插件),该方法试图从流程中访问应用程序对象(通常通过COM从独立应用程序中完成),而您可以只从Autodesk获取应用程序对象。AutoCAD。应用程序服务。应用
HTH公司 是的,黑盒子说的。。。。但对于我们这些新手和新手来说,理解这些行话和流行语通常很难。基本上,他说的是我提供给你的代码是作为一个独立的程序运行的,或者叫做COM方法。
代码中的第一行是从另一端接近它的,也就是说,您正在尝试编写要在AutoCAD环境本身内部运行的代码。也许在座的其他更有经验的人可以为我们详细阐述这一点。我通常使用COM方法编程,但其他人更喜欢应用程序方法。如果您试图在AutoCAD已经运行打开的图形时运行此功能,则需要查看与我提供的不同的内容。我发布的方法基本上适用于闲置的机器,或者只打开AutoCAD而没有加载图形文件。编译的exe程序在AutoCAD不知道的情况下运行,直到从编译的exe调用它。我所做的自动编码不适合应用程序方法,因此我从AutoCAD之外运行所有内容。
我希望我没有把那里的水弄得太浑。我决不能声称自己是这方面的专家。 不过,我通过大量试验得出了这个结论。我现在已经通过COM创建了一个独立的应用程序。我可以启动AutoCAD,但当我发送命令时,我得到“加载失败”
你能指出我的代码有什么问题吗?
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Const progID As String = "AutoCAD.Application.19.1"
Dim acApp As AcadApplication = Nothing
Dim LispPath As String = "..."
Dim My_Lisp As String = "SMBTEST"
Dim Cmd_To_Start_LISP_Program As String = "SMBRUN"
Try
acApp = DirectCast(Marshal.GetActiveObject(progID), AcadApplication)
Catch
Try
Dim acType As Type = Type.GetTypeFromProgID(progID)
acApp = DirectCast(Activator.CreateInstance(acType, True), AcadApplication)
Catch
MessageBox.Show("Cannot create object of type """ + progID + """")
End Try
End Try
If acApp IsNot Nothing Then
acApp.Visible = True
acApp.ActiveDocument.SendCommand("(load """ & LispPath & My_Lisp & ".lsp"" ""The load failed"") " & Cmd_To_Start_LISP_Program & Chr(13))
End If
End Sub 我不确定我可以用什么行话或流行语。。。我说的很直接。如果其他成员不知道两者之间的区别。NET和COM接口;这很好,但我自己从来没有编写过COM应用程序(除非你计算Visual LISP,我没有),我宁愿认为自己是这方面的初学者。NET API。
我知道的很少,我可能知道得很清楚,但这很难表明我是一名专家(我不是)。。。信不信由你,我其实是想帮上忙。
干杯
页:
1
[2]