• 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

  • 相关阅读:
    Ionic开发手机App常用的软件
    Windows的Ionic环境配置
    百度静态资源公共库
    我的程序员之路
    angular.bind
    响应式布局之使用bootstrap
    初识bootstrap
    使用css3实现响应式布局
    mysql-阅读笔记1
    mysql优化
  • 原文地址:https://www.cnblogs.com/key-ok/p/3380399.html
Copyright © 2020-2023  润新知