BCB运行期取得Enum(枚举)类型信息

BCB版串口枚举 一个老外的串口枚举程序,bcb6.0版,测试正常,可以设置FIFO,win7及以上程序需以管理员身份启动。 立即下载

由于Pascal和C++的本质区别,在Delphi里面强大的RTTI功能,BCB中就被相对弱化了很多。
不过即便如此,BCB仍然可以享受TObject带来的好处,
虽然我们不能够直接使用在delphi下十分方便的GetEnumName。

 

我们还是不需要为每个枚举类型实现一个静态的String列表。

考虑一下如下的宏实现,为了享受TObject的好处,我们需要从它继承一个VCL子类,

并且为这个类声明一个属性,使得我们可以使用GetPropInfo来取得ENUM类型信息。

 

#include <TYPINFO.HPP>

 

#define Marco_PrepareEnumerateName(ENUM)  /

class ___TEnumObject___ : TObject         /

{                                         /

  ENUM _se;                               /

__published:                              /

  __property ENUM Prop ={read=_se};       /

};                                        /

AnsiString GetEnumName(const ENUM& value) /

{                                         /

                                          /

  PPropInfo aPropInfo = GetPropInfo(__typeinfo(___TEnumObject___), "Prop"); /

  if (aPropInfo)                                                            /

  {                                                                         /

    return GetEnumName(*(aPropInfo->PropType), int(value));                 /

  }                                                                         /

  return "";                                                                /

}

 

 

有了这个宏的实现,使得将来取得enum类型的时候,事情变得更加容易。

本来计划使用template技术来实现的,但是__property声明后不允许使用模板参数。所以作罢。

//以下为测试代码 

typedef enum {xxx,yyy,zzz,eee,ffff} TSampleEnum;

Marco_PrepareEnumerateName(TSampleEnum)

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  Caption = GetEnumName(xxx);

}

windows sever2019切换Linux内核 安装docker engine后,内核是windows,很多镜像都无法安装使用。 一,在https://github.com/linuxkit/lcow/release 下载最新版本release.zip,我使用了如下版本。 二,新建文件夹C:\Program Files\Linux Containers ,把release.zip(不要解压)放入此文件夹 三,编辑docker配置文件( C:\ProgramData\docker\config\daemon.json) ,电脑中没有该文件,新建一 阅读详情

相关推荐

锐捷交换机路由器配置全攻略:从基础命令到高级功能(附常用命令速查表)

本文提供锐捷交换机路由器配置全攻略,涵盖从基础命令到高级功能的详细指南,包括VLAN划分、DHCP配置、链路聚合等实用技巧,并附常用命令速查表,帮助网络管理员快速掌握锐捷设备运维。

weixin_29285605的博客 518

BCB的属性编辑器

Delphi Open Tools API 浅探 - 属性编辑器savetime2k@yahoo.com  2004.1.26http://savetime.delphibbs.com昨天开始学习 Delphi Open Tools API,第一站是 TPropertyEditor。在阅读 VCL 源码时发现了不熟悉的 interface 操作,只好临时学习了 interface。花了二天时间大概

冷剑魂的专栏——垃圾场 1847

R以及Rstudio超详细安装教程(包括安装过程中出现的问题)

R安装及Rstudio安装,以及安装中出现的问题

2301_76908257的博客 1万+

用RTTI处理程序配置信息

一般来说,程序多少都会有一些自己的配置信息要保存,不论是通常用的保存到INI还是注册表,或者是XML甚至YAML,总归是要写不少代码处理的。问题的麻烦在于,程序中实现操作配置信息通常并不需要关注它是保存在什么地方,以什么格式保存,但是传统的方法不论是调用TIniFile还是TRegistry或者是DOM,都是需要开发者花一些时间精力浪费在这上面。我前一阵写个小程序,不高兴弄配置这些麻烦事,

猛禽的编程艺术 3526

详解从无人机倾斜实景三维建模→模型修复→成果网络发布展示分享全流程

1、倾斜实景三维建模软件:CC(Smart3D)软件2、实景三维模型网页在线发布展示、分享平台:图新地球网页端(Wish3D·Earth平台)图新地球网页端(Wish3D·Earth平台)是基于 WebGL技术研发的国产实景三维模型Web端发布展示平台,可实现TB级倾斜实景三维数据快速加载,支持多种格式的三维模型,如OSGB实景模型、OBJ人工模型、SKP人工模型、RVT格式BIM模型等,同时支持模型单体化、三维模型测量分析、水面特效、日照分析等特殊效果呈现,此外也可以根据您的需要进行本地化部署级功能定制。

GISWorld3D的博客 4376

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 695

C++builder enum类型

C/C++ code #pragma option push -b- enum TThreadPriority { tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical }; //这是字节型的.理论上说这是可能的最小整形.可以是1Byte, 2Bytes, 4Bytes... #pragma op

芒果儿 1203

深入解析Android Qcom Camera HAL3架构与Camx线程模块

本文深入解析了Android Qcom Camera HAL3架构与Camx线程模块的核心原理。文章以高通芯片平台为例,剖析了从按下快门到生成照片的完整Camera流程分析,重点阐述了Camx框架中线程池、消息队列及Fence同步机制如何协同工作,以实现高效、稳定的多线程并发图像处理,为相机性能优化提供理论基础。

weixin_29184075的博客 220

【转】C++中enum枚举类型成员重名问题的解决方法 - Enum枚举类型的类封装

//C#就没有这个问题,有兴趣可以去看看,抛砖引玉一下。C++毕竟还是有些进化不完整。 C++语言中,对于一个枚举类型(enum),其成员值在所属枚举类型的声明作用域内是不可重复的。这个继承自C语言的特性,使我在写程序时碰到有相同名称的枚举成员时,苦于寻找且方便易读的替代枚举名称。 这在C++程序开发方面带来了许多的不方便,在涉及枚举类型时必须时刻关注与现有的枚举变量是否有重名,在一定程度

ACM 【程式=演算法+資料結構】@蜡笔小轩V 1552

车载测试实战:adb logcat日志高效抓取与问题定位技巧

本文详细介绍了车载测试中adb logcat日志的高效抓取与问题定位技巧。作为车载测试的“第一现场”,adb logcat能实时、精准地抓取系统与应用日志,是定位应用崩溃、ANR及功能异常等问题的关键工具。文章从环境搭建、核心命令组合拳到实战分析与自动化脚本,提供了完整的操作指南,帮助测试人员快速掌握这一必备技能,大幅提升问题排查效率。

ii567的博客 1036

(一)激光线扫描-三维成像原理

激光线扫描是一种使用激光作为光源,通过特定的扫描设备(如光学镜头、电机驱动的镜头或电子扫描设备)将激光束引导到目标表面,并按照预定的路径进行扫描的技术。这种技术通常用于测量、检测、打印、切割等多种应用中。

FlyWine的博客 3629

取得枚举类型enum中的元素名称

此例应用了VCL的RTTI机制...#include enum number {One,Two,Three,Four,Five,Six};class TForm1 : public TForm{...private: number FNum;__published: __property number Num = { read = FNum };};.CPP文件

Compile failed 4789

C# MES通信从入门到精通(1)——串口传输文件

本文详细介绍了在Mes通信领域如何使用串口发送文件,由实战经验总结,堪称MES通信领域的葵花宝典!

qq_34059233的博客 3749

C++枚举使用

关于enum class与enum struct以及普通枚举的实例

走在成长的路上 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++中enum的大小

关于枚举类型所占内存的大小,书里对枚举大小的定义是:sizeof枚举是sizeof某类可以包含枚举range的整型,并且不会大于sizeof(int)。也就是说枚举大小不一定等于sizeof(int)。  比如在一个sizeof(int)等于4的机器上,sizeof枚举有可能是1或者4,但不会是8 。 要想强制enum等于一个固定长度,就要定义一个最大的长度放入enum定义中。 比如

y020142014的专栏 3432

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

15 如何从枚举中获得枚举项名称值

(1) 使用Enum.GetName() (2) 使用ToString()方法 public enum AuthMethod { FORMS = 1, WINDOWSAUTHENTICATION = 2, SINGLESIGNON = 3 } stat

乌英达姆的博客 3447

enum,struct,union类型使用和长度

VC,C++ Builder和lcc三个编译器 间枚举类型enum长度的情况. 各种C编译器默认的字节对齐数不一致,要写通用的代码,经常就是使用 #pragma pack(1) ... #pragma pack() 来使编译器以单字节对齐. 今天在bcb5中调用vc6的dll时出现错误,但在VC中调用dll却很正常,说明很有可能是编译器之间的差异造成.仔细debug后发现b...

weixin_33871366的博客 207

usb的旅途之枚举

前面列出了usb枚举过程的大体流程,现在来看一下usb枚举过程的详细分析  USB命令与设备描述符之开发详解 首先列出枚举过程中抓的数据包     /***************************************************************************/ Bus Hound 5.00 capture. Complements of w

射频匠人 908

给枚举常量编写方法

import java.util.*;import java.text.*;public enum ChangLiangFangFa{      ONE{           String getInfo(){return "文萧骋";}},      TWO{           String getInfo(){return "刘梓毅";}},      THR

刘利新 421

Windows 笔记本内屏变暗、亮度调不上去:一次显示器驱动枚举异常的排查修复

本文记录了Windows笔记本内屏变暗且亮度调节失效问题的排查修复过程。作者通过检查电源计划、WMI亮度接口和屏幕设备状态,发现内屏被错误识别为"Generic Monitor"且未正确绑定系统监视器驱动。最终通过移除错误设备实例并重新扫描硬件,使系统重新识别为"通用即插即用监视器"并绑定monitor.inf驱动,成功恢复了亮度调节功能。文章提供了完整的排查步骤和PowerShell命令,指出类似问题可能是由设备枚举异常而非硬件或电源设置问题导致。

小时候超帅的博客 319

HarmonyOS6 PC 动画开发实战:五种 Curve 曲线类型,到底该选哪个?

做 HarmonyOS6 PC 端开发的时候,动画这个东西真的是"一看就会,一做就废"。很多开发者(包括我自己)写动画的时候最常干的事情就是:duration 给个 300,curve 用个默认的,然后就不管了。直到有一天产品经理过来说"这个动画怎么这么生硬",才意识到——。今天咱们就把 HarmonyOS ArkUI 里的 Curve 枚举彻底搞明白。不搞虚的,直接上对比,让你看完就知道什么场景用什么曲线。

qq_37048082的博客 1909

mysql bcmod_mysql基础学习笔记

1、登录数据库。mysql -uroot -pxxxx -h127.0.0.1 -P3306 --prompt xxxprompt xxx可更改提示符 \D表示完整的日期; \d表示当前数据库;\h服务器名称;\u当前用户。2、显示select version(); 显示版本select now();显示时间select user();显示用户3、创建数据库create database xx...

weixin_31616803的博客 212

自制数据库迁移工具-C版-09-HappySunshineV1.8-(支持PG、达梦、Gbase8a)

HappySunshine数据库迁移工具V1.8文档摘要 HappySunshine是一款基于C语言开发的多进程多线程数据库迁移工具,支持Gbase8a、PostgreSQL、达梦(DM)等数据库间的数据同步与离线抽取。

qq_45111959的博客 1312

自制数据库迁移工具-C版-10-HappySunshineV1.9-(支持PG、达梦、Gbase8a)

HappySunshine数据库迁移工具简介 HappySunshine是一款基于C语言开发的高性能数据库迁移工具,支持多进程多线程架构,提供在线迁移和离线抽取两大核心功能。当前版本为V1.9,支持PostgreSQL 14.5、Gbase8a和达梦数据库间的数据迁移,兼容47种PostgreSQL数据类型。 核心功能 在线迁移:支持Gbase8a到Gbase8a(LOAD/INSERT)、PostgreSQL到Gbase8a/DM(INSERT)的数据同步,支持多进程拆分迁移和大批量数据加载。

qq_45111959的博客 1232
上一篇: ADOQuery的Parameter问题
下一篇: 用代码控制新建Console的位置大小
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值