php - 什么是 'module_number' 作为 zend_register_list_destructors_ex 的参数

标签 php c php-extension

我正在编写一个 php 扩展,需要注册一个资源。我一直在阅读有关如何执行此操作的信息以及我看到的所有传递变量的示例

module_number

作为

的最后一个参数
zend_register_list_destructors_ex(NULL, NULL, DESCRIPTOR_NAME, module_number);

我找到的所有文档都没有解释“module_number”是什么。我试图在调用该函数时使用该变量名,但出现以下错误:

ext\niklos\niklos.c(132) : error C2065: 'module_number' : undeclared identifier
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\
VC\Bin\cl.exe"' : return code '0x2'
Stop.

函数调用的最后一个参数应该是什么,或者所有其他示例一直在使用的“module_number”是什么?提前致谢。

最佳答案

zend_register_list_destructors_ex 必须在您的扩展注册的 PHP_MINIT 函数中调用

如果您查看 PHP_MINIT 的宏定义,它会扩展为

int zm_startup_##module(int type, int module_number TSRMLS_DC)

##module 是你的模块的字符串名称

module_number 是引擎传入启动函数的整数

该模块号是 PHP 在内部保留的 id,用于在注册时识别扩展

shmop 扩展是使用资源的简单扩展的一个很好的例子

http://lxr.php.net/xref/PHP_5_5/ext/shmop/shmop.c#137

也就是调用zend_register_list_destructors_ex的实现

http://lxr.php.net/xref/PHP_5_5/ext/shmop/shmop.c#96

这里是注册 MINIT 函数的地方

关于php - 什么是 'module_number' 作为 zend_register_list_destructors_ex 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256142/

相关文章:

php - 如何搁置新发布的记录?

javascript - 如何让 jQuery AJAX 将 .map 函数 var 值作为 JSON 字符串发布

linux - 从 .tgz 文件安装 PHP 扩展

c - 将预包含头文件添加到 Eclipse CDT C 项目

c - 我一直遇到段错误,我不确定为什么

TideSDK中的php.ini和php扩展

php - 从 PHP 调用 C/C++ 库函数 - 在共享库中使用多个类

php - 如何使用 PHP 下载 HTML?

php - Codeigniter URL 重写以删除index.php

c - 使用 read(...) write(...) 在 C 中读取和写入文件