[제품종류] IEC1000
[개발환경] Visual Studio 2008 VB
=============== 질 문 ===============** 아래와 같이 예제를 참고하여, 프로그램을 작성하였읍니다만,
마지막 Write 시에 "Null reference Exception" 이라는 에러메시지가 나와서, 문의 드립니다.
체크해 보시고, 무엇이 잘못되었는지, 알려주셨으면 합니다.
***************************************************************************************
Imports System.Runtime.InteropServices
Imports System.IO
Public Class Test1
Public Structure STRUCTDB 'total size=90 byte
Public xprogno As String ' 3
Public xKn As String '99.99 5*6=30
Public xTemp As String '9999 4*6=24
Public xTime As String '9999 4*6=24
Public xSpare As String ' 9
End Structure
Dim Wstruct As STRUCTDB '구조체
Private Sub Test1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
If KNfileopenStatus = False Then
SmartFile1.FilePathName = "\Flash Disk\KNPROGRAM.TXT"
If SmartFile1.Open() = True Then
KNfileopenStatus = True
SmartFile1.StructType.SetStructType(GetType(STRUCTDB))
End If
End If
End Sub
'**********************************************************************
'Close
Private Sub SmartButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SmartButton2.Click
Me.Close()
End Sub
'**********************************************************************
'Save
Private Sub SmartButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SmartButton1.Click
Dim DBindex As Integer = 1
Try
If KNfileopenStatus Then
'test ' 파일에 구조체 더이터를 씁니다.
Wstruct.xprogno = "1"
Wstruct.xKn = "777"
Wstruct.xTemp = "888"
Wstruct.xTime = "999"
Wstruct.xSpare = "555"
If ProgramAru Then '프로그램이 있으면
SmartFile1.StructType.Write(Wstruct, DBindex, SmartX.SmartFile.WriteMode.Overwrite)
Else
SmartFile1.StructType.Write(Wstruct, DBindex, SmartX.SmartFile.WriteMode.Append)
End If
SmartFile1.Close()
Else
MsgBox("Need file open ", vbOKOnly)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
=============== 답 변 ===============
안녕하세요...
문의 주신 코드에서 문재가 발생할 수 있는 내용을 정리하였습니다.
다음부터 정확한 테스트를 위해서는 프로젝트로 만들어 동작인 가능한 상태로 만들어 보내주시기 바랍니다. 몇몇 변수들이 정의되어 있지 않아 이에 대한 부분은 제거하고 테스트하였습니다.
1. DBindex와 관련하여 Overwrite와 Append동작에서 유효한 값으로 처리되는지 확인 필요
-> Index는 0부터 시작됩니다.
-> DBindex 값이 변경될경우 유효한 값으로 처리되는지 확인 필요
2. 구조체 문자열인 경우 최대길이를 선언해 주셔야 합니다.
파일에 읽기 및 쓰기할 구조체를 정의 합니다.
StructLayout(LayoutKind.Sequential) Attribute를 반드시 정의 합니다.
문자열인 경우 문자의 최대 길이를 미리 정의합니다.
MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)
특수 기호 처리에 문제가 있어 코드를 올리지 몾하는 부분 양해부탁 드리며 SmartFile 예제 참조하시면 확인 가능 합니다.
위 내용으로 해결이 안될 경우 다음의 e-mail 주소로 테스트 가능한 프로젝트로 만들어 보내주시면 확인하도록 하겠습니다.
e-mail: smartx@daum.net
- 감사합니다.