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 字节

相关推荐
点云侠13 小时前
PCL 生成三棱锥点云
c++·算法·最小二乘法
.道阻且长.14 小时前
C++ string 操作指南:接口解析
java·c语言·开发语言·c++
laplaya14 小时前
使用 vcpkg 管理 C++ 项目中的依赖
开发语言·c++
blueman888816 小时前
VS2022 切换定义(F12 / Go to Definition)反应慢
c++·visual studio
凡人叶枫16 小时前
Effective C++ 条款35:考虑 virtual 函数以外的其他选择
java·c++·spring
郝学胜-神的一滴16 小时前
CMake 017:彩色日志输出实战
linux·c语言·开发语言·c++·软件工程·软件构建·cmake
桀人16 小时前
C++——string类的详细介绍
开发语言·c++
插件开发17 小时前
vs2015 cuda c++ cdpSimplePrint范例,递归功能实现演示
linux·c++·算法
zh_xuan17 小时前
PC端操作SQLite数据库
数据库·c++·sqlite
CHHH_HHH17 小时前
【C++】哈希表原理与实战:从冲突解决到性能优化
开发语言·数据结构·c++·学习·算法·哈希算法·散列表