MFC 动态数组CArray类使用说明实例

CArray<CProductPara,CProductPara> m_allPara 到底是什么?

CArray = MFC 动态数组

相当于 自动变长的数组

你可以无限添加型号,不用管大小

自带:添加、删除、获取数量、按下标取数据

尖括号里两个参数是什么意思?

CArray<【元素类型】, 【传递类型】>

第一个 CProductPara:数组里存的是 产品参数结构体

第二个 CProductPara:函数传参时,按 值传递

m_allPara0 → 第1个型号参数

m_allPara1 → 第2个型号参数

m_allPara2 → 第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(&paraBuf,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 len1024; 占用的字节数

char len1 = 1 字节

1 个 char = 1 字节

1024 个 char = 1024 字节

bool = 1 字节

int = 4 字节

WORD = 2 字节

DWORD = 4 字节

float = 4 字节

double = 8 字节

相关推荐
zh_xuan24 分钟前
c++ std::Any 用法
开发语言·c++·any
QiLinkOS10 小时前
第三视觉理解徐玉生与他的商业活动(30)
大数据·c++·人工智能·算法·开源协议
mit6.82410 小时前
阅读的核心,是再读
c++
upgrador12 小时前
基础知识:C++ STL构造函数的左闭右开惯例及其实现原理
开发语言·c++
凯瑟琳.奥古斯特14 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
林中青木14 小时前
CT重构原理及C++代码实现
c++·计算机视觉·重构
满天星830357714 小时前
Protobuf的介绍及使用
c++
☆cwlulu15 小时前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
卷无止境15 小时前
C++ 存储类说明符(Storage Class Specifier)大横评
c++·后端
卷无止境15 小时前
C++ 编程的一大坑:非常量全局变量是"万恶之源"
c++·后端