PHP8のExtensionビルド時に Warning: Missing arginfoエラーが出る際の対処

以前PHPからC#を呼び出すdotnet_ffiというExtensionをつくりました。
ただ、PHP8.1やPHP8.0などの環境でビルドすると、動くものの下記のようなWarningが

Warning: Missing arginfo

この場合はZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EXZEND_BEGIN_ARG_INFO_EX (戻り値がない場合)を使ってarginfoを指定する必要がある模様。

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ret_str_arg_str, 0, 2, IS_STRING, 0)
    ZEND_ARG_INFO(0, string_arg1)
ZEND_END_ARG_INFO()

(略)

static const zend_function_entry dotnet_ffi_funcs_entries[] = {
    PHP_ME(DotnetFFI, ret_str_arg_str, arginfo_ret_str_arg_str, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)

関数の場合は PHP_FE に同様の記載をする模様。

※例によってこれらのPHPのマクロの詳しいドキュメントは見つけられなかったのでPHPのソースから推定

参考

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX の定義
https://github.com/php/php-src/blob/master/Zend/zend_API.h
typeの定義
https://github.com/php/php-src/blob/master/Zend/zend_type_info.h

カテゴリー: php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です