zoukankan      html  css  js  c++  java
  • String的疑问

    ss[1]//var ss:String;
    和
    Pointer(ss)^
    是不是一个意思呢?
     
    答:不是。
    ss[1]表示第一个字符。如:ss:='abc'
    则表示'a'。ss[0]=Length(ss);
    Pointer(ss)^ 和 @s 也不一样。
    就连 cc:PChar
    Pointer(cc)^ 和 @cc 也不一样。
     
    应用:
    一、发送字符串 或者 Record
     
    procedure SendStr(ss:String);
    var cds:TCopyDataStruct;hh:HWND;
    begin
      hh:=FindWindow('TfrmFYErpMsg',nil);
      if hh<>0 then
      begin
        //cds.dwData:=Handle;可要可不要
        cds.cbData:=Length(ss)+1;//不能漏掉+1
        cds.lpData:=AllocMem(cds.cbData);//GetMem(cds.lpData,cds.cbData);可替代
        StrCopy(cds.lpData,PChar(ss));
        SendMessage(hh,WM_COPYDATA,hh,Cardinal(@cds));
        FreeMem(cds.lpData);
      end;
    end;
     
      TRR=Record
        a:String[20];
        b:PChar;//这里注意,不能使用PChar这种长度可变的。
        d:Double;
      end;
    procedure SendRec(aa:TRR);
    var cds:TCopyDataStruct;hh:HWND;
    begin
      hh:=FindWindow('TfrmFYErpMsg',nil);
      if hh<>0 then
      begin
        cds.cbData:=sizeof(aa);
    //    cds.lpData:=AllocMem(cds.cbData);//GetMem(cds.lpData,cds.cbData);
        cds.lpData:=@aa;
        SendMessage(hh,WM_COPYDATA,hh,Cardinal(@cds));
    //    FreeMem(cds.lpData);不知道怎么要这个???
      end;
    end;
     
    二、接收
     
    procedure RecordWM(var ARec:TWMCopyData);message WM_COPYDATA;
     
    procedure TfrmFYErpMsg.RecordWM(var ARec: TWMCopyData);
    var s:String;x:TRR;
    begin
    //字符串
      s:=StrPas(ARec.CopyDataStruct^.lpData);
    //Record
      x:=TRR(ARec.CopyDataStruct.lpData^);
      s:=x.a+#9+x.b+#9+FloatToStr(x.d);
    end;
    View Code

  • 相关阅读:
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    String详解
    数据库中索引相关基础知识
    论文笔记:RankIQA
    目标检测 | 火焰烟雾检测论文(实验部分)
    图像质量评价:合成失真图像方法
  • 原文地址:https://www.cnblogs.com/key-ok/p/3380399.html
Copyright © 2011-2022 走看看