CArray<CProductPara,CProductPara> m_allPara 到底是什么?
CArray = MFC 动态数组
相当于 自动变长的数组
你可以无限添加型号,不用管大小
自带:添加、删除、获取数量、按下标取数据
尖括号里两个参数是什么意思?
CArray<【元素类型】, 【传递类型】>
第一个 CProductPara:数组里存的是 产品参数结构体
第二个 CProductPara:函数传参时,按 值传递
m_allPara[0] → 第1个型号参数
m_allPara[1] → 第2个型号参数
m_allPara[2] → 第3个型号参数
...
标准可保存结构体模板
cpp
class CProductPara
{
public:
union
{
struct
{
// ===== 固定长度字符串 =====
char m_strTypeName[24];
char m_strBrand[24];
// ===== 整数 =====
int m_nValue;
long m_lValue;
BYTE m_byte;
// ===== 浮点数 =====
float m_fValue;
double m_dValue;
// ===== 布尔 =====
bool m_bCheck;
BOOL m_bEnable;
};
char len[1024]; // 固定总长
};
};
void CSEAL_PRESSUREApp::SaveTypeCFG()
{
CFile file;
CProductPara paraBuf;
file.Open(m_strTypeCFGFileName,CFile::modeCreate|CFile::modeWrite);
for(int i = 0 ; i < theApp.m_allPara.GetSize() ; i ++)
{
paraBuf = m_allPara[i];
file.Write(¶Buf,sizeof(m_allPara[i]));
}
file.Close();
}
CString // ❌ 绝对不能用!
string // ❌ 绝对不能用!
char* // ❌ 指针!不行!
int* // ❌ 指针!不行!
CArray // ❌ 不能嵌套!
CDialog // ❌ 窗口类 不行!
CObject // ❌ MFC对象 不行!
vector<> // ❌ 动态数组 不行!
因为它们不是固定大小、带内存指针、无法直接二进制保存:
能直接用 file.Write() 保存进二进制文件的只有:纯值类型 + 固定长度数组
任何带 "动态内存"、"指针"、"CString" 的都不能用!
结构体里安全添加的常用类型
cpp
BYTE m_byte; // 无符号单字节 0~255
WORD m_word; // 无符号双字节 0~65535
DWORD m_dword; // 无符号4字节
short m_short; // 短整型
long m_long; // 长整型
unsigned int m_uint; // 无符号整数
float // 单精度浮点数
int
double
bool
BOOL // MFC的布尔(TRUE/FALSE)
char[固定长度]
char len[1024]; 占用的字节数
char len[1] = 1 字节
1 个 char = 1 字节
1024 个 char = 1024 字节
bool = 1 字节
int = 4 字节
WORD = 2 字节
DWORD = 4 字节
float = 4 字节
double = 8 字节