DELPHI设置枚举类型size

 

delphi枚举类型长度默认为2个字节(单字),而在C中枚举为4个字节(双字),如果需要跨这两个平台编程,传输结构时会由于数据长度不一造成灾难。

经过查找资料,原来delphi可以通过{$Z+} {$Z-} {$Z1} {$Z4} 等宏设置枚举类型的长度,小至1个字节,大至4个字节。

官方说明如下:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsminimumenumerationsize_xml.html

The $Z directive controls the minimum storage size of Delphi enumerated types. 

An enumerated type is stored as an unsigned byte if the enumeration has no more than 256 values, and if the type was declared in the {$Z1} state (the default). If an enumerated type has more than 256 values, or if the type was declared in the {$Z2} state, it is stored as an unsigned word. Finally, if an enumerated type is declared in the {$Z4} state, it is stored as an unsigned double word. 

The {$Z2} and {$Z4} states are useful for interfacing with C and C++ libraries, which usually represent enumerated types as words or double words.

Note: Note: For backwards compatibility with early versions of Delphi and CodeGear Pascal, the directives {$Z-} and {$Z+} are also supported. They correspond to {$Z1} and {$Z4}, respectively.

例子如下:

http://www.delphibasics.co.uk/RTL.asp?Name=$Z

Example code : Various enum type sizes

type
  {$Z1}
  TCars1  = (Rover, Jaguar, Honda);    // Will fit into 1 byte
  TFruit1 = (Banana=255, Apple, Pear); // Will exceed one byte
  {$Z4}
  TCars2  = (Ford, Nissan, Vauxhall);  // Now uses 4 bytes
  TFruit2 = (Orange=255, Plum, Grape); // Now uses 4 bytes
begin
  ShowMessage('TCars1  size = '+IntToStr(SizeOf(TCars1)));
  ShowMessage('TFruit1 size = '+IntToStr(SizeOf(TFruit1)));
  ShowMessage('TCars2  size = '+IntToStr(SizeOf(TCars2)));
  ShowMessage('TFruit2 size = '+IntToStr(SizeOf(TFruit2)));
end;

   TCars1  size = 1
   TFruit1 size = 2
   TCars2  size = 4
   TFruit2 size = 4

转载于:https://www.cnblogs.com/h2zZhou/p/5000153.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 反向代理 websocket 协议

为什么80%的码农都做不了架构师?>>> 主要配置内容 server {listen 80;server_name xxx.xxx.xxx;location / {try_files $uri $uri/ /index.html;root /workspace/www;index index.html index.htm;}location ^~/letchat/ {proxy_pass http:/…

oracle中区间大小,Oracle的逻辑结构(表空间、段、区间、块)——总结

Oracle逻辑结构全景结构图以下为个人整理的一些关于Oracle逻辑结构的相关数据字典:SELECT * FROMDBA_TABLESPACES--记录各个表空间的详细信息SELECT * FROMDBA_TABLESPACE_USAGE_METRICS--记录各个表空间的使用状况SELECT * FROMDBA_DATA_FILES --记录各个数据文件的…

C#3.0之神奇的Lambda表达式和Lambda语句

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。所有 Lambda 表达式都使用 Lambda 运算符 >,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有&#xff09…

[C++] Nested Radical Constant

做高数助教被天煞的大一学生坑了,发现是个未解问题,没有解析解。。 用C搞了下,就是这样。。。 No closed-form expression is known for this constant (Finch 2003, p. 8; S. Plouffe, pers. comm., Aug. 29, 2008). /*********************…

api-gateway实践(03)新服务网关 - 网关请求拦截检查

参考链接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html 一、为什么要拦截检查请求? 防止重放攻击、篡改重放,进行使用规格检查 1、请求可能是重放攻击 重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方…

oracle存储过程关键字有哪些,ORACLESTREAMS存储过程中的一些参数有哪些?

1,maintain_mode参数可取golbal或transportable tablepsaces,当该参数取global时,表示streams进行全库复制,否则表示streams进行表空间复制,需要在tablespace_names参数中指定待复制的一个或多个表空间。2,…

正则验证多个邮箱用分号隔开

代码如下&#xff1a; <script> var str xxxx126.com;123234234qq.com;xxxxxxxxxx.con.cn; var reg /^((([a-z0-9_\.-])([\da-z\.-])\.([a-z\.]{2,6}\;))*(([a-z0-9_\.-])([\da-z\.-])\.([a-z\.]{2,6})))$/; if(reg.test(str)){ alert(1); }else{ …

转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

JUnit 是被广泛应用的 Java 单元测试框架&#xff0c;但是它没有很好的提供参数化测试的支持&#xff0c;很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离&#xff0c;在后续的修改和维护上有诸多限制和不便。Feed4JUnit 是开源的基于 JUnit 的扩…

青岛智能院助力智慧城市 打造智能产业“黄埔军校”

作为青岛市的主干道之一&#xff0c;山东路的拥堵状况一直让人头疼。近日&#xff0c;因为一种交通组织优化方案的实施&#xff0c;山东路和延吉路的通行率提高了近50%。而研发这种智能管控系统的正是位于青岛高新区的青岛智能产业技术研究院。截止今年5月份&#xff0c;青岛智…

oracle备份归档文件,oracle 如何不备份已经备份的归档

在Oracle数据库备份归档日志时&#xff0c;通常会保存最近几天的归档日志文件不删除。如&#xff1a;backup archivelog all;delete noprompt archivelog all completed before sysdate -14; 在本地保留14天的归档日志&#xff0e;再备份时&#xff0c;归档会重复再备份一次。…

博客迁移指南

1.今天起 博客迁移至farbox 2. 新博客地址&#xff0c;http://yoon.farbox.com转载于:https://www.cnblogs.com/yoon/p/5003384.html

iOS 第三方登录 !

http://www.it165.net/pro/html/201409/21854.html 转载于:https://www.cnblogs.com/Seeulater/p/4076727.html

dp递推 hdu1978

How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5422 Accepted Submission(s): 3185 Problem Description这是一个简单的生存游戏&#xff0c;你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的…

codeforce-600C. Make Palindrome(贪心)

http://codeforces.com/problemset/problem/600/C&#xff1b; 题意&#xff1a;给你一个小写字母组成的英文串&#xff0c;将它转换为回文串&#xff0c;要求&#xff0c;改变的字母的个数最小&#xff0c;移动字母不算改变字母。 所得的串字典序是最小的。最后输出所得到的串…

oracle触发器没有效果,触发器不起作用,各位帮忙看看什么原因?

测试数据模型如下&#xff1a;Create Table test_c (Id Number,seq Number,state varchar2(5));select a.*,rowid from test_c aInsert Into test_cValues(1011,101,00A);Insert Into test_cValues(1012,101,00A);Insert Into test_cValues(1021,102,00A);Insert Into test_cVa…

10个我最喜欢问程序员的面试问题

最近我拜读很多文章&#xff0c;都是介绍面试问题的&#xff0c;我真心不理解&#xff0c;面试官代表公司想要聘用的是最优秀的程序员&#xff0c;那就意味着需要想出一些有意义的面试问题。如果你就提一些毫无用处的垃圾问题&#xff0c;那么很容易遗漏很多能干的程序员。当然…

oracle动态性能视图和静态,oracle最重要的9个动态性能视图

v$session v$session_wait (在10g里功能被整合,凑合算1个吧.)v$processv$sqlv$sqltextv$bh (更宁愿是x$bh)v$lockv$latch_childrenv$sysstatv$system_event按组分的几组重要的性能视图1。System 的 over viewv$sysstat , v$system_event , v$parameter2。某个session 的当前情况…

glTF格式初步了解

glTF格式初步了解近期看到Qt 3D的进展。偶然了解到了一种新的格式&#xff1a;glTF格式。这样的格式据说比现有的3D格式更加符合OpenGL应用的须要。这引起了我的好奇。于是我在Qt 3D的外部链接中找到了有关glTF的相关链接。上海萌梦信息科技有限公司&#xff08;微博&#xff1…

【】局部刷新:

【】局部刷新&#xff1a; //页面加载时绑定按钮点击事件$(function(){ $("#按钮id").click(function(){ refresh(); });});//点击按钮调用的方法function refresh(){ window.location.reload();//刷新当前页面. //或者下方刷新方法 //par…

技术贴-搜狗打字

超强技术帖&#xff1a;遇到不会读的字&#xff0c;怎么用拼音打出来&#xff1f;】方法很简单&#xff0c;就是先打个“u”然后打各个部首的读音&#xff0c;就能在拼音输入法中打出来哦。比如&#xff0c;骉&#xff0c;可以输入umamama&#xff0c;输入法就会自动出现“骉”…