Delphi 2010 的Char
今天用delphi 2010,做一个简单的内存映射的程序,在delphi以前版本上跑的好好的程序,在2010上,居然出现了不同的效果,发送端发送的字符串,接收端只收到一半,大概程序如下:
发送端:
var
str : String;
begin
CopyMemory(@(PShare^.Data),str,Length(str)); //把数据拷贝到共享内存
end;
接收端:
mmo1.Text := PShare^.Data;
查找帮助,Length的帮助中有那么一句话:For Unicode (WideString) strings, Length returns the number of bytes divided by two.
莫非是Unicode在捣鬼?上网查查,发现delphi2010里面大范围的使用了Unicode格式,pChar也从以前Ansi格式的1byte,变成2byte,在Lengh的时候就除以2,那么我这个str里面不管有什么当然就会被腰斩了。
怎么解决呢?
万一老师说,可以用ByteLength函数,但是也有人说,ByteLength函数只能对Unicode字符串求字节长度,如果要对Ansi字符串进行计算,那么结果会是正确值的两倍,虽然在这个程序中,ByteLength函数足够满足我的需求了,但是为了养成良好的习惯,我采用了另外一种方法,就是Length(str)*SizeOf(Char),这样不管是求AnsiChar还是Unicode Char的字符长度,都可以适用了。
发送端程序修改之后:
CopyMemory(@(PShare^.Data),str,Length(str)*SizeOf(Char));
经过测试,成功了!
相关文档:
*类的公开属性(代码)
示例:访问类的published属性
说明:vmtFieldTable(Published Field表)指向Published Field表有序排列,只存储当前类的PublishedField表,得到父类的Published Field表需要往上遍历。
注意:只有类型是类或接口的数据成员才可定义为published的访问级别
代码:
type
TMyO ......
很早做过的一个delphi项目,把里面用到的技术总结一下,主要是针对象我这样的delphi新手,技术上做个积累吧!
假设我们的数据库配置文件ServerInfo.ini内容如下:
[ServerInfo]
ServerIP=192.168.1.5
SQLDBName=Data
SQLUserID=sa
SQLPwd=
我们定义一个连接数据库的过 ......
Delphi从6.0就开始支持Web Services的开发和应用了,本文通过使用Delphi 7.0调用新浪发送短信的Web Service进行短信应用程序开发这一实例详细的介绍在Delphi中如何开发基于Web Services的应用系统。
第一步,准备工作,了解新浪短信Web Service。新浪发送短信的Web Service地址是http://smsinter.sina.com.cn/ws/smswebs ......