저는 라스베리 파이의 SPI 확장을 만들고 있는데, 추가하려고하는 클래스 함수에 다소 이상한 문제가 있습니다.PHP 확장 : 정의 된 함수가 정의되지 않았습니다.
PHP_METHOD(Spi, blockTransfer);
#if (PHP_MAJOR_VERSION >= 5)
ZEND_BEGIN_ARG_INFO_EX(Spi__blockTransfer_args, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 1)
#if (PHP_MINOR_VERSION > 0)
ZEND_ARG_ARRAY_INFO(0, data, 1)
#else
ZEND_ARG_INFO(0, data)
#endif
ZEND_ARG_INFO(0, colDelay)
ZEND_ARG_INFO(0, discard)
ZEND_END_ARG_INFO()
#else /* PHP 4.x */
#define Spi__blockTransfer_args NULL
#endif
이 몇 가지 다른 방법과 함께하고, 유사 것을 정의 : 나는 정의 내 php_spi.h에서
: (php_spi on Github 당신은 내가 놓친 게 분명 아무것도 확인하려는 경우의 repo는 여기) 현재 일하고 있습니다.
/* {{{ proto array blockTransfer(array data[, int colDelay[, bool discard]])
*/
PHP_METHOD(Spi, blockTransfer)
{
zend_class_entry * _this_ce;
zval * _this_zval = NULL;
zval * data = NULL;
HashTable * data_hash = NULL;
long colDelay = 1;
zend_bool discard = 0;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "a|lb", &_this_zval, Spi_ce_ptr, &data, &colDelay, &discard) == FAILURE) {
return;
}
_this_ce = Z_OBJCE_P(_this_zval);
// some code
}
/* }}} blockTransfer */
을 그리고 내 함수는 함수 목록의 항목이 있는지 확인 만든 :와,
static zend_function_entry Spi_methods[] = {
PHP_ME(Spi, __construct, Spi____construct_args, /**/ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
PHP_ME(Spi, __destruct, Spi____destruct_args, /**/ZEND_ACC_PUBLIC | ZEND_ACC_DTOR)
PHP_ME(Spi, transfer, Spi__transfer_args, /**/ZEND_ACC_PUBLIC)
PHP_ME(Spi, blockTransfer, Spi__blockTransfer_args, /**/ZEND_ACC_PUBLIC)
PHP_ME(Spi, getInfo, Spi__getInfo_args, /**/ZEND_ACC_PUBLIC)
PHP_ME(Spi, setupTimer, Spi__setupTimer_args, /**/ZEND_ACC_PUBLIC)
PHP_ME(Spi, usecDelay, Spi__usecDelay_args, /**/ZEND_ACC_PUBLIC)
{ NULL, NULL, NULL }
};
코드는 정상적으로 컴파일을 내 spi.c 파일에서 나는 다음과 같은 함수가 정의되어 오류나 경고는 없지만 함수를 테스트하려고하면 함수가 정의되지 않았다는 PHP 오류가 발생합니다. 내가 뭘 놓칠 수 있니? 나이가 1 년 이상이다 질문에 downvote 주셔서 감사합니다 :
는
EDIT (그냥 명확하게하기 위해, 이것은이 하나 개의 기능을 제외하고 작동하는 확장 기능입니다).
내가 과거에 해왔 던 바보 같은 일 중 하나는 ZEND_GET_MODULE() 문에서 상수를 정의하는 것을 잊는 것이다. – cleong
나는 그것이 확실히있다 - 나의 연장의 다른 모든 부분은 예상대로 작동한다. – frak
어쩌면 그것은 바보 같지만 컴파일러를 사용하여 spi.c를 컴파일하면됩니까? 이것이 g ++ 인 경우 내 보낸 함수에 유형 정보를 추가 할 수 있습니다. 또는 gcc를 사용합니까 (unix/linux를 사용하는 경우 ...) – Grzegorz