易截截图软件、单文件、免安装、纯绿色、仅160KB

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));
经过测试,成功了!


相关文档:

Delphi 能不能从Ring 3进入Ring 0

Delphi 能不能从Ring 3进入Ring 0?
楼主skyworld_xm(skyworld)2004-11-19 09:58:55 在 Delphi / Windows SDK/API 提问
Delphi   能不能从Ring   3进入Ring   0?  
  有例子吗?  
  多谢. 问题点数:100、回复次数:20Top
1 楼jinjazz(近身剪)回复于 2004-11-19 10:13:27 得 ......

Delphi中窗体响应按键步骤

1.因为KeyPreview默认是 False;我们这里需要响应键盘事件的话,需要将其修改为True;
所以KeyPreview:=True; 这对一些快捷键会有用。
在窗体属性上修改KeyPreview := True;
2.在窗体的FormKeyDown函数里写:
if KeyPreview then
    Form将先响应键盘事件(在TEdit等控件之前)
else
    除非Fo ......

Delphi 类与对象内存结构浅析(附件2)

*类的公开属性(代码)
示例:访问类的published属性
说明:vmtFieldTable(Published Field表)指向Published Field表有序排列,只存储当前类的PublishedField表,得到父类的Published Field表需要往上遍历。
注意:只有类型是类或接口的数据成员才可定义为published的访问级别
代码:
type
    TMyO ......

delphi 读取txt文件


1、 放一下memo控件、一个button、opendialog
在button的click事件中
if opendialog1.Execute then
memo1.Lines.LoadfromFile(opendialog1.filename);  
2、滥简单的事啊
var
   Mytxt : TStringList;
begin
   MyText :=
TStringList('你的文本文件及路径');
 
&nbs ......

Delphi遍历Panel组件上的所有控件

procedure frmMain.CLS; //主窗体自定义事件CLS
var i:integer;
begin
  for i:=0 to panel5.ControlCount -1 do
  begin
    if panel5.Controls[i] is TEdit then  //Edit组件
    begin
       ((panel5.Contro ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号