Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: evilive (29.08.2012 в 16:51) Доброго всем времени суток! Проблема в следующем: есть простейшее PHP расширение, написанное на С++, в которой происходит вызов функции из внешней библиотеки , также написанной на С++. При вызове функции в PHP, выводится ошибка: "Fatal error: Call to undefined function mul() in C:\Apache2.2\htdocs\phpinfo.php on line 3". Общая схема такая: PHP: echo mul(5, 4); -> PHP Extension: PHP_FUNCTION(mul) -> DLL: Math::Mul() Вот вызов функции в PHP: <?php echo mul(5, 4); ?> Здесь экстеншен:
#include "stdafx.h" using namespace MathFuncs; PHP_FUNCTION(sum); PHP_FUNCTION(mul); const zend_function_entry test_functions[] = { PHP_FE(sum, NULL) PHP_FE(mul, NULL) {NULL, NULL, NULL} }; zend_module_entry test_module_entry = { STANDARD_MODULE_HEADER, // #if ZEND_MODULE_API_NO >= 20010901 "test_ext", // название модуля test_functions, // указываем экспортируемые функции NULL, // PHP_MINIT(test), Module Initialization NULL, // PHP_MSHUTDOWN(test), Module Shutdown NULL, // PHP_RINIT(test), Request Initialization NULL, // PHP_RSHUTDOWN(test), Request Shutdown NULL, // PHP_MINFO(test), Module Info (для phpinfo()) "0.1", // версия нашего модуля STANDARD_MODULE_PROPERTIES }; ZEND_GET_MODULE(test) PHP_FUNCTION(sum) { int a, b; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b)) return; RETURN_LONG(a+b); } PHP_FUNCTION(mul) { double a, b; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &a, &b)) return; RETURN_DOUBLE(Math::Mul(5, 6)); }
namespace MathFuncs { class Math { public: static __declspec(dllexport) double Mul(double a, double b); static __declspec(dllexport) double Div(double a, double b); }; }
#include "test.h" #include <stdexcept> using namespace std; namespace MathFuncs { double Math::Mul(double a, double b) { return a * b; } double Math::Div(double a, double b) { if(b == 0) { throw new invalid_argument("b cannot be zero!"); } return a / b; } }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: