9
回答
hprose DELPHI 调用报错的问题
破译“粽”子代码,拿最高悬赏!>>>   

procedure TForm1.Button2Click(Sender: TObject);
var
  client : THproseIdHttpClient;
begin
  client := THproseIdHttpClient(nil);
  //client.UseService('http://127.0.0.1/helloserver.php');
  client.UseService('http://www.hprose.com/example/');
  showmessage(client.Invoke('hello',['world']));
  client.Free;
end;

--------------------------------

 

 

举报
microd
发帖于4年前 9回/1K+阅
共有9个答案 最后回答: 2年前

引用来自“andot”的评论

你没有写session_start()

引用来自“haitaosoft”的评论

有典型、完整的客户端使用demo吗?

hprose-delphi-master好像只是写服务端的?

hprose-delphi 现在只有客户端,服务器端还没写。使用方法可以参见这里的文档:https://github.com/andot/hprose/blob/master/doc/1.3/pdf/pascal.pdf

当然这个文档比较久,现在的版本里面增加了许多新特性,比如任意类型对象的智能对象包装,对 Delphi 新版本泛型的支持,对跨平台的(iOS,Android)的支持,都没写到这个文档里,以后会慢慢把这些文档补上。

--- 共有 2 条评论 ---
andot回复 @haitaosoft : session_start() 这个是 PHP 里面的函数,上面这个问题是 PHP 和 Delphi 通过 hprose 通讯,传递 session 的问题。只要 PHP 服务部分开启了 session,Delphi 客户端会自动处理 session cookie 的。 2年前 回复
haitaosoftxe的新特性,不关心; 关心的是 session_start() 这样的函数:还有哪些,什么情况下需要使用它们 2年前 回复

引用来自“andot”的评论

你没有写session_start()

有典型、完整的客户端使用demo吗?

hprose-delphi-master好像只是写服务端的?

procedure TForm1.Button4Click(Sender: TObject);
var
  HPROSE1: THproseIdHttpClient;
  datas,rows:IList;
  br:boolean;
  i: Integer;
begin
  HPROSE1 := THproseIdHttpClient.Create(nil);
  HPRose1.UseService('http://127.0.0.1/DataInterface.php');
  br := HPRose1.Invoke('check_login',['admin','123']);
  datas := VarToList(HPRose1.Invoke('getQueryData',['user1','where 1=1']));
  for i:=0 to datas.Count-1 do
  begin
    rows :=VarToList(datas[i]);
    Memo1.Lines.Add('----------Line' + IntToStr(i+1) + '----------');
    Memo1.Lines.Add('id   =' + rows[0]);
    Memo1.Lines.Add('name    =' + rows[1]);
    Memo1.Lines.Add('password =' + rows[2]);
  end;
end;

问题描述:

我想用PHROSE 来做数据传送,用PHP 做服务器,DELPHI 做客户端,定时发请求去取数据。现在是问是,想在发请求时先做个用户验证,结果php,没问题,DELPHI 又有问题了,代码如下. 另外一点,就是HPROSE 的数据类型转换的PPT说明中能分类举例说明一下就跟好。谢谢!

========PHP Server Code ============

<?php
    include("hprose/php5/hproseHttpServer.php");

    $server = new HPRoseHttpServer();
    $server->addFunction('check_login');

    //登陆验证通过后发布
    if (isset($_SESSION["client_authorized"]) && $_SESSION["client_authorized"] == true)
    {
        require_once('./InterFaceFunList.php');
        $server->addFunction('hello');
        $server->addFunction('getQueryData');
    }

    function check_login($username, $password ){
        if (($username == 'admin') && ($password == '123'))
        {
            $_SESSION["client_authorized"] = true;
            $_SESSION['admin'] = 'admin';
            $_SESSION['password'] = '123';
            //$arr = array();
            //$arr['username'] = $username;
            //$arr['password'] = $password;
            return true;
        }
        else
        {
            return false;
        }
    }
    $server->handle();
?>

================================

=======DELPHI client code ============

procedure TForm1.Button4Click(Sender: TObject);
var
  HPROSE1: THproseIdHttpClient;
  datas,rows:IList;
  br:boolean;
  i: Integer;
begin
  HPROSE1 := THproseIdHttpClient.Create(nil);
  HPRose1.UseService('http://127.0.0.1/DataInterface.php');
  br := HPRose1.Invoke('check_login',['admin','123']); //
  datas := VarToList(HPRose1.Invoke('getQueryData',['user1','where 1=1']));
  for i:=0 to datas.Count-1 do //报错 'variant method calls not suppoerted'
  begin
    rows :=VarToList(datas[i]);
    Memo1.Lines.Add('----------Line' + IntToStr(i+1) + '----------');
    Memo1.Lines.Add('id   =' + rows[0]);
    Memo1.Lines.Add('name    =' + rows[1]);
    Memo1.Lines.Add('password =' + rows[2]);
  end;
end;

 

 

 

顶部