- 論壇徽章:
- 0
|
我寫(xiě)了一個(gè)PHP的擴(kuò)展函數(shù),需要返回值,返回的值有多個(gè),所以我想返回一個(gè)結(jié)構(gòu)體或者一個(gè)對(duì)象給調(diào)用的PHP
如果能返回的是結(jié)構(gòu)體,那PHP端應(yīng)該怎么接?
如果不能返回結(jié)構(gòu)體,返回一個(gè)對(duì)象PHP端怎么接?
//多針消息結(jié)構(gòu)體
typedef struct tagST_MUITI_FRAME_INFO
{
uint32 lAllDataSize; //數(shù)據(jù)總大小
uint16 unPacketNum; //拆分?jǐn)?shù)據(jù)包個(gè)數(shù)
uint16 unPacketIndex; //拆分?jǐn)?shù)據(jù)包索引,起始值為0
uint16 unPacketSize; //拆分?jǐn)?shù)據(jù)包大小
uint16 unRsv; //預(yù)留
}ST_MUITI_FRAME_INFO;
//協(xié)議數(shù)據(jù)結(jié)構(gòu)體
typedef struct tagST_MESSAGE_INFO
{
int32 lMsgID; //消息ID
int32 lMsgLen; //消息長(zhǎng)度
int8 cFrameType; //0:?jiǎn)螏?:多幀
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,¶m) == 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); //這里我不只要返回一個(gè)值,我想返回多個(gè)值(一個(gè)結(jié)構(gòu)體或?qū)ο螅?br />
}
|
|