sayid 发表于 2012-7-17 00:40:05

VB.NET调用CAD出现下面问题,麻烦高手解答

本帖最后由 sayid 于 2012-7-17 00:54 编辑

调用的时候出现错误,如图所示,麻烦高手解答
附上我的代码:
之前下面的AcadApp定义是AutoCad.Application下面Acaddoc一样,按照书上的要求,但是看到一个帖子(我没有发链接权限,麻烦高手百度“”如何使VB 开发的程序不依赖于CAD 的版本”是JXCAD论坛里面的一个帖子)这样说的,我就这样做了,没什么问题,但是就是死活到图中那块过不去,麻烦版主、高手帮我看看,程序到底问题出在哪?
Dim acadApp As Object
   Dim acadDoc As Object
   Dim myExcel As New Excel.Application
   Dim MTextStr() As String '第i文本字符串
   Dim MTextStrX() As Double '第i文本字符串的X坐标
   Dim MTextStrY() As Double '第i文本字符串的Y坐标
   Dim MTextStrID() As Long '第i文本字符串的ID号
   Dim MTextStrFt As String 'MText文本字符串的格式代码
   Dim NumberofMTextStr As Integer '文本字符串数目
   Dim R() As Double '第i文本字符串位于第R行
   Dim C() As Double '第i文本字符串位于第C列
   Dim ColumsX() As Double '明细表首个最大列所在行各文本字符串的X坐标
   Dim Colums As Integer '明细表列数
   Dim MtextHeight As Double '文字高
   Dim LeftLowerPoint As Object '明细表左下角坐标
   Dim RightUpperPoint As Object '明细表右上角坐标
   Dim i, j As Integer
   Dim mydb As dao.Database '数据库对象
   Dim Cell(200, 10)'明细表各单元格文本字符
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         Dim AcadApp As AcadApplication
         Dim AcadDoc As AcadDocument
         AcadApp = Nothing
         AcadDoc = Nothing
         Call 连接AutoCAD()
   End Sub
   Sub 连接Excel()
         On Error Resume Next
         myExcel = GetObject(, "Excel.Application")
         If Err.Number Then
             Err.Clear()
             myExcel = CreateObject("Excel.Application")
             If Err.Number Then
               MsgBox("不能运行Excel,请检查本机是否安装了Excel软件!")
               Exit Sub
             End If
         End If
         myExcel.Visible = True
         AppActivate(myExcel.Caption)
   End Sub
   Sub 连接AutoCAD()
         If (CheckApplicationIsRun("acad.exe")) Then

            MessageBox.Show("检测到CAD软件已经运行,请点击确定进入程序!")
             Me.Show()
         Else
             MessageBox.Show("请先打开AutoCAD软件,或者本地计算机没有安装CAD软件,请安装后先运行AutoCAD!")
             Me.Close()
         End If
         acadApp.Visible = True '界面可视
         acadDoc = acadApp.ActiveDocument
         AppActivate(acadApp.Caption) '显示AutoCAD界面
   End Sub
   Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
         Me.OpenFileDialog1.Title = "请首先打开AutoCAD装配图文件"
         Me.OpenFileDialog1.Filter = ".dwg|*.dwg"
         If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
             AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)
         Else
             Exit Sub
         End If


雪山飞狐_lzh 发表于 2012-7-17 07:57:34

acadApp是空值
没有GetObject或Create。。。

sayid 发表于 2012-7-17 09:03:00

雪山飞狐_lzh 发表于 2012-7-17 07:57 static/image/common/back.gif
acadApp是空值
没有GetObject或Create。。。

谢谢版主的回复,但是我之前的代码是
Sub 连接AutoCAD()
      On Error Resume Next
      AcadApp = GetObject(, "AutoCAD.Application")
      If Err.Number Then
            Err.Clear()
            AcadApp = CreateObject("AutoCAD.Application")
            If Err.Number Then
                MsgBox("请先打开CAD软件,或检查本地计算机是否安装了AutoCAD!!!")
                Exit Sub
            End If
      End If
      AcadApp.Visible = True '界面可视
      AcadApp.WindowState = AutoCAD.AcWindowState.acMax '界面最大化
      AppActivate(AcadApp.Caption) '显示AutoCAD界面
    End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      '用对话框打开待提取的装配图明细表的AutoCAD文件
      Me.OpenFileDialog1.Title = "请首先打开AutoCAD装配图文件"
      Me.OpenFileDialog1.Filter = ".DWG|*.DWG"
      If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
            AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)
      Else
            Exit Sub
      End If
      Call 第i文本字符串的值()
      Call 第i文本字符串位于第R行()
      Call 第i文本字符串位于第C列()
      Call 填充Access表()
    End Sub
但是到 AcadApp.WindowState = AutoCAD.AcWindowState.acMax '界面最大化   
提示没有这个类acMax
问题一:检测不到我已经运行的CAD2004或者2010,问题二:
就又运行不下去了,会出现错误:
AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)未将对象引用设置到对象的实例。

sayid 发表于 2012-7-17 09:04:13

错误如图所示,烦请班主和高手看一下

雪山飞狐_lzh 发表于 2012-7-17 10:58:28

你要先
call 连接AutoCAD()

sayid 发表于 2012-7-17 14:36:40

雪山飞狐_lzh 发表于 2012-7-17 10:58 static/image/common/back.gif
你要先
call 连接AutoCAD()

这个是有的,在FORM_LOAD.

crazylsp 发表于 2012-7-18 18:17:42

提示是不是说要设setAcadApp=newacadapplication 才可以哈。

sayid 发表于 2012-7-19 09:23:46

crazylsp 发表于 2012-7-18 18:17 static/image/common/back.gif
提示是不是说要设setAcadApp=newacadapplication 才可以哈。

是啊 是 啊   或说对象 应初始为NULL。。。。。

雪山飞狐_lzh 发表于 2012-7-19 14:32:19

Public Class Form1
    Dim acApp

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub

    Public Function GetAcApp()
      Dim progID As String = "AutoCAD.Application"
      Try
            acApp = GetObject(, progID)
      Catch
            Try
                acApp = CreateObject(progID)
                acApp.Visible = True
            Catch
                Return Nothing
            End Try
      End Try
      Return acApp
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      GetAcApp()

    End Sub
End Class

sayid 发表于 2012-7-20 16:49:06

雪山飞狐_lzh 发表于 2012-7-19 14:32 static/image/common/back.gif
Public Class Form1
    Dim acApp



感谢版主,我先试试。。。
页: [1] 2
查看完整版本: VB.NET调用CAD出现下面问题,麻烦高手解答