php扩展接收参数问题

来源:互联网 发布:英伟达掌机 知乎 编辑:程序博客网 时间:2024/06/04 18:35
  double tmp_user_uin;
uint32_t area_id;
uint32_t type;
uint32_t begin_sec;
uint32_t begin_usec;
uint32_t num;
uint32_t game_id;
if ( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "dlsllddddddd",&dopuin,&appid,&IP,&iplength,&PORT,&waitms,&tmp_user_uin,&area_id,&type,&begin_sec,&begin_usec,&num,&game_id ) == FAILURE )

sprintf(sErrMsg,"输入参数与接受参数不匹配");
add_assoc_string(return_value,"error",sErrMsg,1);
add_assoc_long(return_value,"errno",input_para_errno);
return;
}
uint64_t user_uin = (uint64_t) tmp_user_uin;
area_id = (uint32_t) area_id;
type = (uint32_t) type;
begin_sec = (uint32_t) begin_sec;
begin_usec = (uint32_t) begin_usec;
num = (uint32_t) num;
game_id = (uint32_t) game_id; 



这段代码,你会发现 user_uin 会失真。拿到的uin和输入到php扩展里面的uin是不一样的。
改成下面的就ok了:

double tmp_user_uin;
uint32_t area_id;
uint32_t type;
uint32_t begin_sec;
uint32_t begin_usec;
uint32_t num;
uint32_t game_id;
if ( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "dlslldllllll",&dopuin,&appid,&IP,&iplength,&PORT,&waitms,&tmp_user_uin,&area_id,&type,&begin_sec,&begin_usec,&num,&game_id ) == FAILURE )

sprintf(sErrMsg,"输入参数与接受参数不匹配");
add_assoc_string(return_value,"error",sErrMsg,1);
add_assoc_long(return_value,"errno",input_para_errno);
return;
}
uint64_t user_uin = (uint64_t) tmp_user_uin;
area_id = (uint32_t) area_id;
type = (uint32_t) type;
begin_sec = (uint32_t) begin_sec;
begin_usec = (uint32_t) begin_usec;
num = (uint32_t) num;
game_id = (uint32_t) game_id; 



说明:
php扩展在接受参数的时候是有参数间的影响的。


0 0