c/c++语言开发共享PHP。 延期。 调用现有的PHP函数

所以我决定为php写一个扩展名。 一切似乎都很好,除非我遇到一个小问题。

我有php-5.4.9源代码。 文件ext/standard/mail.c具有很棒的function

 PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) 

在我的扩展中,在acme.c我包含了

 ... #include "php.h" #include "ext/standard/php_mail.h" #include "php_ini.h" ... 

所以php_mail感觉很好,工作正常。 但是,显然,我想使用mail.c的代码从第101行开始到结束于189( https://pastie.org/5444192 5-93对应的行中)。 所以我抓住了自己的想法(虽然在某些方面很尴尬)为什么不调用PHP_FUNCTION(mail) ? 到目前为止我找不到那些宏,实际上我想知道实现这个想法的最佳方法。

我的内部zend工程师(新手)建议我使用call_user_function

 ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC); 

但我无法弄清楚如何称呼它。

这个问题! 如何( 非常欢迎mailfunction的一个例子)来调用PHP_FUNCTION定义的PHP_FUNCTION

    找出函数如何工作的最简单方法是在lxr.php.net上搜索它。 出现的第一个例子是readline: http : //lxr.php.net/xref/PHP_TRUNK/ext/readline/readline.c#474

    mail的用途是类似的。 给定为zvals( to_zvalfrom_zvalmsg_zval )的参数,调用非常简单:

     zval *params = { to_zval, from_zval, msg_zval }; zend_uint param_count = 3; zval *retval_ptr; zval function_name; INIT_ZVAL(function_name); ZVAL_STRING(&function_name, "mail", 1); if (call_user_function( CG(function_table), NULL /* no object */, &function_name, retval_ptr, param_count, params TSRMLS_CC ) == SUCCESS ) { /* do something with retval_ptr here if you like */ } /* don't forget to free the zvals */ zval_ptr_dtor(&retval_ptr); zval_dtor(&function_name); 

    如果您没有zvals参数,则可以使用MAKE_STD_ZVALZVAL_STRING创建它们。

    需要了解更多c/c++开发分享PHP。 延期。 调用现有的PHP函数,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享PHP。 延期。 调用现有的PHP函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980283.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐