delphi中Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar的分别

作者:小菜 更新时间:2025-02-26 点击数:
简介:前往Delphi专题 我们这编文章来了解一下在Delphi 中 Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideCha

【菜科解读】

前往Delphi专题

我们这编文章来了解一下在Delphi 中 Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar 的用法

varc: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF}begin{用十进制方式赋值:}c := #65;ShowMessage(c); {A}{用十六进制方式赋值:}c := #$41;ShowMessage(c); {A}{用 Chr 函数代替 # 符号}c := Chr(65);ShowMessage(c); {A}c := Chr($41);ShowMessage(c); {A}{Char 长度当然会是 1}ShowMessage(IntToStr(Length(c))); {1}{Char、AnsiChar 允许这样方便地赋值(也就是和 1 字节长度的字符串是兼容的):}c := 'B';ShowMessage(c); {B}end;--------------------------------------------------------------------------------//UniCode 字符 WideChar; 和 AnsiChar 不同, WideChar 是占 2 字节大小.varc: WideChar; {WideChar 的取值范围是: #0..#65535, 用十六进制表示是: #$0..#$FFFF}begin{WideChar 兼容了 AnsiChar 的 #0..#255; 但占用了 2 字节大小}c := #65;ShowMessage(c); {A}ShowMessage(IntToStr(Length(c))); {1; 这是字符长度}ShowMessage(IntToStr(SizeOf(c))); {2; 但占用 2 个字节}{用十六进制赋值}c := #$4E07;ShowMessage(c); {万}ShowMessage(IntToStr(Length(c))); {1; 这是字符长度}ShowMessage(IntToStr(SizeOf(c))); {2; 但占用 2 个字节}{用十进制赋值}c := #19975;ShowMessage(c); {万}{如果不超出 #255 的范围是可以直接赋值的}c := 'B';ShowMessage(c); {万}{这样不行}//c := '万'; {这是 Delphi 的支持问题, 估计 Delphi 2008 应该可以解决}{可以这样变通一下:}c := WideString('万')[1];ShowMessage(c); {万}{用 WideChar 的方式显示我的名字}ShowMessage(#19975#19968); {万一}ShowMessage(#19975 + #19968); {万一}ShowMessage(#$4e07#$4e00); {万一}end;--------------------------------------------------------------------------------//字符指针 PChar、PAnsiChar; 在当前版本(2007)中它们没有区别.varp: PChar;str: string;begin{可以给 PChar 直接赋予字符串常量}p := '万一';ShowMessage(p); {万一}ShowMessage(IntToStr(Length(p))); {4}{给变量值需要转换}str := '万一的 Delphi 博客';p := PChar(str); {转换}ShowMessage(p); {万一的 Delphi 博客}ShowMessage(IntToStr(Length(p))); {18}end;--------------------------------------------------------------------------------//宽字符指针 PWideCharvarp: PWideChar;str: WideString; {注意这里不是 String}begin{可以给 PWideChar 直接赋予字符串常量}p := '万一';ShowMessage(p); {万一}ShowMessage(IntToStr(Length(p))); {2}{给变量值需要转换}str := '万一的 Delphi 博客';p := PWideChar(str); {转换}ShowMessage(p); {万一的 Delphi 博客}ShowMessage(IntToStr(Length(p))); {13}end;

转自万一老师的Blog http://www.cnblogs.com/del/

原文地址: http://www.cnblogs.com/del/archive/2008/03/03/1088958.html

delphi,中,Char,、,AnsiChar,WideC

百里视屡战屡败一生之中只赢过一次 却一仗让秦国赢得天下

自古”胜败乃兵家常事“,只要有战争存在的地方,就必然有胜败。

而在乱世之中,战争之事的频繁,就涌现出了很多的常胜将军,他们也因为立下了许多战功而被世人赞扬,更是被自己的国家之人尊为英雄。

不过有人胜利必定有人失败,在秦国就有一个很奇怪的人,此人名为孟明视,他,甚至一生之中只打了一次胜仗。

不过厉害的地方在于,这场胜仗却最终让秦国奠定了统一天下的基础。

孟明视是战国时期著名的政治家、思想家,又称“五羖大夫”的百里奚之子,原名百里视。

百里奚可谓是一个能人,虽然只是是用五张黑羊皮从市井之中换回的人,但却最终成为了秦国的一代,帮助秦穆公将秦国发展成之一,为秦国最终统一中国奠定了牢固基础。

有着这样的一个父亲,孟明视自然也受到了秦国的重视,又因为武艺高强,而被秦穆公封为了大夫。

死后,秦穆公便表现出了自己的雄心壮志,他希望自己能够成为中原的霸主,于是命令孟明视带领士兵攻打晋国。

然而孟明视毕竟只是一个没有战争经验之人,因此连续打了几次大败仗,并且在崤山惨败,几近乎,连自己都被俘虏,幸得最终侥幸生还。

过了两年,孟明视向秦穆公表示自己愿意再次带兵攻打晋国,一雪前耻。

秦穆公对此十分高兴,便答应了他的要求,但没有想到这一次孟明视又打了败仗。

此时的孟明视虽然没有被俘虏,但是,他也是有羞耻心的,因此内心十分惭愧,自己上了囚车,准备接受惩罚。

没想到的是,秦穆公表示,翻过船的人未来必定有所出息,于是他再一次重用了孟明视, 孟明视也非一个无能之人,此人之前的失败多是因为没有准备,也没有经验,因此多次轻敌。

这一次的他信心满满,并发誓说道“要是这次再打不了胜仗,我决不活着回来!” 最终,孟明视果然不负秦穆公的期望,赢得了胜利。

经过这一战,秦国因为打败了中原的霸主晋国而威震西戎,有二十来个小国和部族都争先恐后地归附了秦国,使秦国扩地千里,成了西戎的霸主,也为秦国未来一统六国打下了坚实的基础。

可以说,孟明视是一个厉害的人,最厉害的地方在于,他能够从战争之中成长起来,也通过一次次的失败为未来的胜利积累战争经验,并最终击败敌人。

随机文章齐齐哈尔干尸复活之谜,被埋复活极力挣扎身连胎盘古巴比伦空中花园现争议,位置并不在巴比伦挪威NSM精确制导导弹,曾受到F35青睐(制导方式奇特)顶级掠食者蛇发女怪龙图片,头大如牛秒杀各种陆地恐龙(体长8米)人类的超能力怎么激活,屌丝靠变异但会变废物/开发大脑只会变聪明

Delphi与VC共享接口和对象,互相通信、互相操作实例分享

我经常会用 Delphi 写一些工具和应用,为了扩展方便,大部分都会做成插件形式。

迫于某些原因,我的插件不但不用其他开发工具来完成,比如 VC。

于是有个大问题需要解决:如何让 D 和 VC 互相通信、互相操作。

最普遍的做法,无非是定义一些方法,VC 写 Dll 导出这些方法,D 载入 Dll 调用。

但问题是稍大点规模的应用,这种方式非常麻烦,也不够直观。

于是花了点时间研究 D 和 VC 之间共享接口和对象的一些方法,现将要点共享发布出来,希望对大家有用。

基础事项:在 D 和 VC 中,要共享的接口、对象中的方法的调用约定必须为 stdcall1. class 的 使用Delphi 和 VC 中都使用抽象类,将方法都定义为纯虚方法,成员的声明顺序请保持一致。

需要注意的是 Delphi 的类方法。

一般的静态类方法在 VC 中直接跳过即可,虚的类方法在 VC 定义为一般的虚函数即可。

D:TTestObj=classpublicclassprocedureFoo;procedureUpdate(Intf:ITestIntf);virtual;stdcall;abstract;procedureFree;virtual;stdcall;abstract;end;VC:classITestObj{public:virtualvoid__stdcallUpdate(ITestIntf*pIntf)=0;virtualvoid__stdcallFree()=0;};2. 接口D 的 IInterface / IUnknown,在 VC 中定义为interface /*class*/ : public IUnknown,成员的声明顺序请保持一致注意,D 中接口支持属性定义,但是 VC 不支持,因此 D 接口中的属性定义请放在声明的最后如果接口的实例化是在 VC 中,有点有意思的小细节要注意,详见代码的注释D:ITestIntf=interface[‘{781E6521-8768-4ADA-B843-445ECE548C27}‘]functionGetText:PAnsiChar;stdcall;procedureSetText(AValue:PAnsiChar);stdcall;functionGetValue:Integer;stdcall;procedureSetValue(AValue:Integer);stdcall;propertyText:PAnsiCharreadGetTextwriteSetText;propertyValue:IntegerreadGetValuewriteSetValue;end;VC:interfaceDECLSPEC_UUID("781E6521-8768-4ADA-B843-445ECE548C27")ITestIntf:publicIUnknown{public:virtualLPCSTR__stdcallGetText()=0;virtualvoid__stdcallSetText(LPCSTRlpszMsg)=0;virtualint__stdcallGetValue()=0;virtualvoid__stdcallSetValue(intvalue)=0;};示例代码中,在 D 里实现了一个接口提供给 VC DLL,在 VC DLL 里实现了一个接口和一个类提供给 D 里使用。

代码下载 Delphi,与,共享,接口,和,对象,互相,通信,、,我,

加入收藏
               

delphi中Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar的分别

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录