这是我从Fixo找到的代码的链接。在第12页的下方。菲索在这方面真的很在行,过去他帮了很大的忙。我给他发了一个PM,里面有我修改过的代码,看看他是否有时间帮忙。代码可以工作,它实际上会打开一个现有的图形,这是我最终要做的,就像我现在使用的VBA代码一样。它还可以在一个非常高和窄的窗口中打开AutoCAD,而不是最大化。此外,我需要加载和执行LISP程序。
http://www.dreamincode.net/forums/topic/244731-how-to-connect-to-autocad-and-open-a-drawing/
这是我修改过的Fixo代码。它实际上是一个表单,但我正在开发一个用户输入较少的流程,所以我将其改为控制台应用程序。
- Imports System.Runtime.InteropServices
- Imports System.Reflection
- Imports System.Globalization
- Imports System.Collections
- Public Class ReflectionCommands
- <System.Security.SuppressUnmanagedCodeSecurity()> _
- Public Shared Sub TestACAD(ByVal dwgname As String)
- 'Save current culture to variable
- Dim thisThread As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
- 'Set culture to whatever you want
- thisThread = New System.Globalization.CultureInfo("en-US")
- Dim appProgID As String = "AutoCAD.Application"
- Dim filename As String = dwgname
- 'NGet reference on intergrace IDispatch
- Dim AcadType As Type = Type.GetTypeFromProgID(appProgID)
- 'Launch AutoCAD
- Dim AcadApp As Object = Activator.CreateInstance(AcadType)
- Dim visargs() As Object = New Object(0) {}
- visargs(0) = True
- 'Set Application Window visible
- AcadApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, Nothing, AcadApp, visargs, Nothing)
- Dim AcadDocs As Object = AcadApp.GetType().InvokeMember("Documents", BindingFlags.GetProperty, Nothing, AcadApp, Nothing)
- 'Create array of parameters
- Dim args() As Object = New Object(1) {}
- args(0) = filename
- args(1) = False ' read-only=false
- 'open a drawing
- Dim AcDoc As Object = AcadDocs.GetType.InvokeMember("Open", BindingFlags.InvokeMethod, Nothing, AcadDocs, args, Nothing)
- Dim Util As Object = New Object
- Try
- 'Get reference on active document
- AcDoc = AcadApp.GetType.InvokeMember("ActiveDocument", BindingFlags.GetProperty, Nothing, AcadApp, Nothing, Nothing)
- 'Get reference on AcadUtility
- Util = AcDoc.GetType().InvokeMember("Utility", BindingFlags.GetProperty, Nothing, AcDoc, Nothing)
- 'Get reference on ModelSpace
- Dim oSpace As Object = AcDoc.GetType.InvokeMember("ModelSpace", BindingFlags.GetProperty, Nothing, AcDoc, Nothing)
- Catch ex As Exception
- End Try
- End Sub
- End Class
- Module Module1
- Sub Main()
- Dim fname As String = "H:\Test123.dwg"
- ReflectionCommands.TestACAD(fname)
- End Sub
- End Module
|