Vb.net 使用OpenDoc6打开图形文档

Vb.net 使用OpenDoc6打开图形文档,vb.net,api,solidworks,Vb.net,Api,Solidworks,我正在尝试使用vb.net OpenDoc6命令打开图形文档。这是我的代码片段,我尝试遍历所有文件并尝试打开图形 每当它试图打开文件时,它都会给我一个nullreferenceexception。我不能把这件事归结于一件特别的事情。可能是调用OpenDoc时我试图传递的参数 Imports EPDM.Interop.epdm Imports SldWorks Imports SolidWorks.Interop Imports SolidWorks.Interop.sldworks Import

我正在尝试使用vb.net OpenDoc6命令打开图形文档。这是我的代码片段,我尝试遍历所有文件并尝试打开图形

每当它试图打开文件时,它都会给我一个nullreferenceexception。我不能把这件事归结于一件特别的事情。可能是调用OpenDoc时我试图传递的参数

Imports EPDM.Interop.epdm
Imports SldWorks
Imports SolidWorks.Interop
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports System.Runtime.InteropServices
Imports System
Imports System.Diagnostics

Public Class TraverseFilesFolders

    Dim swApp As SldWorks.SldWorks
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim swModDoc As SldWorks.ModelDoc2
    Dim longstatus As Integer = 0
    Dim longwarning As Integer = 0

    Dim vault As IEdmVault17
    Public Sub TraverseFilesFolders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Try

            Dim Views() As EdmViewInfo = Nothing
            Dim vault5 As IEdmVault5 = New EdmVault5()
            vault = DirectCast(vault5, IEdmVault17)

            vault.GetVaultViews(Views, False)
            VaultsComboBox.Items.Clear()
            For Each View As EdmViewInfo In Views
                VaultsComboBox.Items.Add(View.mbsVaultName)
            Next
            If VaultsComboBox.Items.Count > 0 Then
                VaultsComboBox.Text = VaultsComboBox.Items(0)
            End If

        Catch ex As Runtime.InteropServices.COMException
            MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + vbCrLf + ex.Message)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Public Sub TraverseFoldersButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TraverseFoldersButton.Click

        Try

            'Log into selected vault as the current user
            vault.LoginAuto(VaultsComboBox.Text, Me.Handle.ToInt32())

            MessageBox.Show(vault.GetVaultType().ToString(), "Vault type")

            Dim log As String = Nothing
            vault.GetClientLog(log)
            'TextBox1.Text = log

            TraverseFolder(vault.RootFolder)

        Catch ex As Runtime.InteropServices.COMException
            MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + vbCrLf + ex.Message)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Public Sub TraverseFolder(ByVal CurFolder As IEdmFolder5)

        Try

            'Enumerate the files in the folder
            Dim FilePos As IEdmPos5
            FilePos = CurFolder.GetFirstFilePosition
            Dim file As IEdmFile5
            While Not FilePos.IsNull
                file = CurFolder.GetNextFile(FilePos)
                'Get its checked out status
                If file.IsLocked Then
                    ListBox2.Items.Add(file.LockPath)
                ElseIf Not file.IsLocked And file.GetLocalPath(CurFolder.ID).ToString.Contains("SLDDRW") Then
                    MessageBox.Show(file.GetLocalPath(CurFolder.ID).ToString)
                    Try
                        swModDoc = swApp.OpenDoc6(file.GetLocalPath(CurFolder.ID).ToString, 3, 0, "", longstatus, longwarning)
                    Catch ex As NullReferenceException
                        MessageBox.Show(ex.ToString)
                    End Try
                End If
            End While

            'Enumerate the subfolders in the folder
            Dim FolderPos As IEdmPos5
            FolderPos = CurFolder.GetFirstSubFolderPosition
            While Not FolderPos.IsNull
                Dim SubFolder As IEdmFolder5
                SubFolder = CurFolder.GetNextSubFolder(FolderPos)
                TraverseFolder(SubFolder)
            End While

        Catch ex As Runtime.InteropServices.COMException
            MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + vbCrLf + ex.Message)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class

交换为空。根据要附加到现有SOLIDWORKS会话还是创建新会话,有几种初始化方法

要创建新会话,请执行以下操作:

swApp = New SldWorks()
swApp.Visible = True
要附加到现有会话,请执行以下操作:

swApp = CType(Marshal.GetActiveObject("SldWorks.Application"), ISldWorks)

显然,第一步是交换为空吗?你如何初始化它?它可能无法正确连接到solidworks应用程序。您需要显示更多代码。特别是,
CurFolder
swap
@RobertBaron的初始化,我把整个代码都放进去了。这是我第一次使用Solidworks API,所以请告诉我是否可以改进我的代码。我不熟悉Solidworks,但我认为您需要创建Solidworks对象,类似于
Set swap=CreateObject(“SldWorks.Application”)
Set swap=Application.SldWorks
@AndrewK,我在整个代码中加入了它。你也能看一下吗?你能检查一下这个问题吗