procedure TForm1.Button15Click(Sender: TObject);
var
   result:integer;
   recvContent:PChar;
   ss,tt : string;
             //手机号 发送者附加号 接收者附加号 短信内容 时间      标识
   procedure aa(mobile, senderaddi, recvaddi,     ct ,   sd:PChar; flag:Pointer);stdcall;
   var
   f: integer;
   begin
     f := integer(Pointer(flag)^);
     if(f = 1) then
      tt := string(mobile);
       ShowMessage(string(mobile) + ';' + string(senderaddi) + ';' + string(recvaddi)+';' +
                   string(ct) + ';' + StrPas(sd));
     smessage := string(mobile);
   end;
begin
   try
     result := _ReceiveSMSEx(PChar(Edit1.Text),@aa);
     while (result = 2) do
       result := _ReceiveSMSEx(PChar(Edit1.Text),@aa);
   except
      on exception do begin
      end;
   end;
   if(result = 1) then
      ShowMessage('接收短信成功')
   else if(result = 101) then
      ShowMessage('网络故障')
   else if(result = 102) then
      ShowMessage('其它故障')
   else if(result = 0)  then
      ShowMessage('失败')
   else if(result = 105) then
      ShowMessage('参数指针为空')
   else if(result = -1) then
      ShowMessage('未知故障')
end;
各位大侠,在回调函数aa中,我如何把mobile值赋值给tt呢即tt := string(mobile);

解决方案 »

  1.   

    从代码看,procedure aa 是 TForm1.Button15Click 方法的内嵌过程,可以直接引用方法局部变量tt
    只是aa怎么个回调法没看出来
      

  2.   

    你已经赋值了。
    而且貌似回调函数不是这样的吧
    function x:LRESULT;stdcall;这样才对。
      

  3.   

    在  ReceiveSMSEx 里加一个传址参数! 把tt的地址传给他,然后在aa里面继续传!
    这样设计挺奇怪!
      

  4.   

    把TT变成变量形参试试://手机号 发送者附加号 接收者附加号 短信内容 时间 标识
      procedure aa(mobile, senderaddi, recvaddi, ct , sd:PChar; flag:Pointer;var tt:string);stdcall;
      var
      f: integer;
      begin
      f := integer(Pointer(flag)^);
      if(f = 1) then
      tt := string(mobile);
      ShowMessage(string(mobile) + ';' + string(senderaddi) + ';' + string(recvaddi)+';' +
      string(ct) + ';' + StrPas(sd));
      smessage := string(mobile);
      end;