ヘッダー
共有メモリ関数(shmop) が普通にビルドできるので
そこから整理してみました
#ifndef PHP_SHMOP_H
#define PHP_SHMOP_H
extern zend_module_entry lightbox_module_entry;
#define phpext_lightbox_ptr &lightbox_module_entry
#ifdef PHP_WIN32
#define PHP_SHMOP_API __declspec(dllexport)
#else
#define PHP_SHMOP_API
#endif
PHP_MINIT_FUNCTION(lightbox);
PHP_MINFO_FUNCTION(lightbox);
PHP_FUNCTION(lightbox_open);
PHP_FUNCTION(lightbox_read);
PHP_FUNCTION(lightbox_delete);
#endif
関数部分
必要な情報は、サンプルがあるので揃うとは思いますが
現在は printf を試した程度です
以下のように php.ini に記述して動作しています
extension=php_lightbox.dll
( phpinfo にも表示されます )
<?
lightbox_open ( );
print lightbox_read( 0, "param", 0, 0 );
//phpinfo();
?>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_ini.h"
#include "php_shmop.h"
# ifndef PHP_WIN32
# include <sys/ipc.h>
# include <sys/shm.h>
#else
#include "tsrm_win32.h"
#endif
#include "ext/standard/info.h"
// *****************************************************
// 関数リスト
// *****************************************************
zend_function_entry lightbox_functions[] = {
PHP_FE(lightbox_open, NULL)
PHP_FE(lightbox_read, NULL)
PHP_FE(lightbox_delete, NULL)
{NULL, NULL, NULL}
};
// *****************************************************
// module_entry
// *****************************************************
zend_module_entry lightbox_module_entry = {
STANDARD_MODULE_HEADER,
"lightbox",
lightbox_functions,
PHP_MINIT(lightbox),
NULL,
NULL,
NULL,
PHP_MINFO(lightbox),
NO_VERSION_YET,
STANDARD_MODULE_PROPERTIES
};
/* }}} */
// *****************************************************
// これで PHP のライブラリとして正しく認識される
// *****************************************************
ZEND_GET_MODULE(lightbox)
// *****************************************************
//
// *****************************************************
PHP_MINIT_FUNCTION(lightbox)
{
return SUCCESS;
}
// *****************************************************
// phpinfo 表示用
// *****************************************************
PHP_MINFO_FUNCTION(lightbox)
{
php_info_print_table_start();
php_info_print_table_row(2, "lightbox support", "enabled");
php_info_print_table_end();
}
// *****************************************************
// 整数を返す関数
// *****************************************************
PHP_FUNCTION(lightbox_open)
{
printf("%s\n", "test" );
RETURN_LONG(0);
}
// *****************************************************
// 引数処理と文字列の戻り値
// *****************************************************
PHP_FUNCTION(lightbox_read)
{
char *return_string;
long key, mode, size;
char *flags;
int flags_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsll",
&key,
&flags, &flags_len,
&mode,
&size) == FAILURE) {
return;
}
return_string = emalloc(128+1);
strcpy(return_string, "return_string");
RETURN_STRINGL(return_string, strlen("return_string"), 0);
}
// *****************************************************
// bool を返す
// *****************************************************
PHP_FUNCTION(lightbox_delete)
{
RETURN_TRUE;
}
|
|