[解決]PHP extension RETURN_RESOURCE zend_parse_parameters("r")
我現在有C lib:
struct mytype *mycreate(char *blah){
struct mytype *la;
la=malloc(123);
printf("Create %p\n", la);
return la;
}
void myinit(struct mytype *p){
printf("Init %p\n", p);
}
--
PHP wrapper:
PHP_FUNCTION(mycreate){
char *c, *p;
int l;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &c, &l) == FAILURE){
return;
}
RETURN_RESOURCE((long int)mycreate(c));
}
PHP_FUNCTION(myrun){
struct mytype *p;
char *c;
int l;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &p, &c, &l) == FAILURE){
RETURN_BOOL(0);
}
myinit(p);
...
}
--
PHP code:
<?php
$h=mycreate("lalala");
echo $h;
echo myrun($h,"abc");
?>
--
Output:
Create 0x486dda00
Resource id #1215158784
Init 0x4862aa28
Segmentation fault
--
問題:
c lib裡面mycreate傳回的是0x486dda00
php這邊看到的resource id #1215158784正好是decimal的0x486dda00
目前應該沒錯
接下來傳進myrun的時候, myrun再把這個指標送給myinit
這是後myinit看的的卻不是原本的位址了!
請問是我型態沒弄對嗎? resource不能直接轉pointer?
--
順便問一下
用ext_skel生出來的php wrapper skeleton
會讓我的code受到GPL感染嗎?
這個自問自答...
PHP不是GPL..
--
謝謝
--
國愛‧主民‧學科‧康健‧道人
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.231.23
※ 編輯: buganini 來自: 220.135.231.23 (05/23 17:18)
→
05/23 18:03, , 1F
05/23 18:03, 1F
→
05/23 18:04, , 2F
05/23 18:04, 2F
→
05/23 18:06, , 3F
05/23 18:06, 3F
※ 編輯: buganini 來自: 220.135.231.23 (05/23 18:06)
→
05/23 18:10, , 4F
05/23 18:10, 4F
→
05/23 18:10, , 5F
05/23 18:10, 5F
→
05/23 18:11, , 6F
05/23 18:11, 6F
→
05/23 18:15, , 7F
05/23 18:15, 7F
※ 編輯: buganini 來自: 220.135.231.23 (05/23 19:10)
http://0rz.tw/jrzYJ
解的時候要用zend_rsrc_list_entry去收
然後用->ptr
※ 編輯: buganini 來自: 220.135.231.23 (05/23 19:37)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章