liangchaoxi 发表于 2018-01-30 16:45

PHP的扩展如何返回一个结构体或者对象?


我写了一个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;      //消息长度
    int8cFrameType;   //0:单帧,1:多帧
    int8acRsv;
    ST_MUITI_FRAME_INFO stMultiFrameInfo;
    int8acMsgBuff;
   
}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);//这里我不只要返回一个值,我想返回多个值(一个结构体或对象)
   

}


页: [1]
查看完整版本: PHP的扩展如何返回一个结构体或者对象?