[제품종류] IEC667Lite
[개발환경] Visual Studio 2008 C#
설정 정보 저장을 위해 구조체 선언을 하고, SmartFile을 이용해 구조체 저장방법으로 진행하려고 합니다.구조체 선언은 아래와 같이 진행하였습니다.
구조체 내 {("3종류 데이터 * 10개씩"을 갖는 구조체)를 다시 "10개"}를 갖는 배열형 멤버가 있습니다.
[StructLayout(LayoutKind.Sequential)]
public struct FINSTALL
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public double[] Set1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] Set2;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] Set3;
}
public struct FLIMIT
{
public double Min;
public double Max;
}
public struct FSETUP
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public FINSTALL[] Install;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public FLIMIT[] Limit;
public double Rbase;
public double Cbase;
public double Hbase;
public FSETUP(double ARbase, double ACbase, double AHbase)
{
Install = new FINSTALL[10];
for (int p = 0; p < 10; p++)
{
Install[p].Set1 = new double[10];
Install[p].Set2 = new byte[10];
Install[p].Set3 = new byte[10];
for (int s = 0; s < 10; s+)
{
Install[p].Set1[s] = 0.5;
Install[p].Set2[s] = 1;
Install[p].Set3[s] = 1;
}
}
Limit = new FLIMIT[3];
for (int m = 0; m < 3; m++)
{
Limit[m].Min = 0.0;
Limit[m].Max = 0.0;
}
Rbase = ARbase;
Cbase = ACbase;
Hbase = AHbase;
}
}
아래와 같이 파일을 불러올 때,
Setup = (FSETUP)SetupFile.StructType.Read(); 구문에서
NullReferenceException이 발생하는데 이유를 못 찾겠습니다.
SetupFile = new SmartX.SmartFile();
SetupFile.FilePathName = SETUP_FILE_PATH;
SetupFileOpenStatus = false;
Setup = new FSETUP(0.0, 0.0, 0.0);
if (SetupFile.Open())
{
SetupFile.StructType.SetStructType(typeof(FSETUP));
/*exception 발생 위치*/ Setup = (FSETUP)SetupFile.StructType.Read();
SetupFileOpenStatus = true;
}
else
{
SmartX.SmartMessageBox.Show("Failed to open settings file");
}
그리고, 아래와 같이 파일을 저장하고 있으며, 파일생성은 이루어지지만 정상적인 데이터를 볼 수 없습니다.
SetupFile.StructType.SetStructType(typeof(FSETUP));
SetupFileOpenStatus = true;
for (int p = 0; p < 10; p++)
{
for (int s = 0; s < 10; s+)
{
Setup.Install[p].Set1[s] = 0.0;
Setup.Install[p].Set2[s] = 0;
Setup.Install[p].Set3[s] = 0;
}
}
for (int m = 0; m < 3; m++)
{
Setup.Limit[m].Min = 0.4;
Setup.Limit[m].Max = 2.1;
}
Setup.Rbase = 0.0;
Setup.Cbase = 1.0;
Setup.Hbase = 0.0;
SetupFile.StructType.Write(Setup);
배열을 갖는 구조체를 smartfile을 통해 저장하고 불러오는 방식을 알고 싶습니다.
감사합니다.