免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 6650 | 回复: 0

PHP的扩展如何返回一个结构体或者对象? [复制链接]

论坛徽章:
0
发表于 2018-01-30 16:45 |显示全部楼层

我写了一个PHP的扩展函数,需要返回值,返回的值有多个,所以我想返回一个结构体或者一个对象给调用的PHP

如果能返回的是结构体,那PHP端应该怎么接?
如果不能返回结构体,返回一个对象PHP端怎么接?



//多针消息结构体
typedef struct tagST_MUITI_FRAME_INFO
{
    uint32 lAllDataSize;       //数据总大小
    uint16 unPacketNum;        //拆分数据包个数
    uint16 unPacketIndex;      //拆分数据包索引,起始值为0
    uint16 unPacketSize;       //拆分数据包大小
    uint16 unRsv;              //预留
}ST_MUITI_FRAME_INFO;

//协议数据结构体
typedef struct tagST_MESSAGE_INFO
{
    int32 lMsgID;        //消息ID
    int32 lMsgLen;      //消息长度
    int8  cFrameType;   //0:单帧,1:多帧
    int8  acRsv[31];
    ST_MUITI_FRAME_INFO stMultiFrameInfo;
    int8  acMsgBuff[0];
   
}ST_MESSAGE_INFO;



PHP_FUNCTION(GetMessageData)
{

    char  *pcSegData  = NULL;
    size_t lStrLen = 0;
    size_t lSegDataLen = 0;
    size_t lMessageInfoLen = 0;

    zval             *param;
    zval             *Message;
    zval              retval;
   
//    zend_object *

    ST_MESSAGE_INFO *pstMessageInfo = NULL;

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "slz",&pcSegData,&lSegDataLen,&param) == FAILURE) {
        return;
    }

    lMessageInfoLen = sizeof(ST_MESSAGE_INFO) + lSegDataLen;

     pstMessageInfo = (ST_MESSAGE_INFO*)malloc(lMessageInfoLen);

     if (NULL == pstMessageInfo)
     {
         printf("malloc failed! in %s\n",__FUNCTION__);
         goto end;
     }


end:

    RETURN_ZVAL(&retval, 0, 1);  //这里我不只要返回一个值,我想返回多个值(一个结构体或对象)
   

}


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP