明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2306|回复: 12

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

  [复制链接]
发表于 2012-7-17 00:40:05 | 显示全部楼层 |阅读模式
本帖最后由 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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-7-17 07:57:34 | 显示全部楼层
acadApp是空值
没有GetObject或Create。。。
 楼主| 发表于 2012-7-17 09:03:00 | 显示全部楼层
雪山飞狐_lzh 发表于 2012-7-17 07:57
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)未将对象引用设置到对象的实例。
 楼主| 发表于 2012-7-17 09:04:13 | 显示全部楼层
错误如图所示,烦请班主和高手看一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-7-17 10:58:28 | 显示全部楼层
你要先
call 连接AutoCAD()
 楼主| 发表于 2012-7-17 14:36:40 | 显示全部楼层
雪山飞狐_lzh 发表于 2012-7-17 10:58
你要先
call 连接AutoCAD()

这个是有的,在FORM_LOAD.
发表于 2012-7-18 18:17:42 | 显示全部楼层
提示是不是说要设setAcadApp=newacadapplication 才可以哈。
 楼主| 发表于 2012-7-19 09:23:46 | 显示全部楼层
crazylsp 发表于 2012-7-18 18:17
提示是不是说要设setAcadApp=newacadapplication 才可以哈。

是啊 是 啊   或说对象 应初始为NULL。。。。。
发表于 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
 楼主| 发表于 2012-7-20 16:49:06 | 显示全部楼层
雪山飞狐_lzh 发表于 2012-7-19 14:32
Public Class Form1
    Dim acApp

感谢版主,我先试试。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:53 , Processed in 0.189579 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表