Работа С C++ Библиотекой Из Php Расширения

Тема в разделе "MS Visual C++", создана пользователем evilive, 29 авг 2012.

  1. evilive

    evilive Гость

    Доброго всем времени суток!

    Проблема в следующем: есть простейшее 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):
    <?php
    echo mul(5, 4);
    ?>
    Здесь экстеншен:

    Код (C++):
    #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));
    }
    И библиотека, заголовок:

    Код (C++):
    namespace MathFuncs
    {
    class Math
    {
    public:
    static __declspec(dllexport) double Mul(double a, double b);

    static __declspec(dllexport) double Div(double a, double b);
    };
    }
    и тело:
    Код (C++):
    #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;
    }
    }
    В чем может быть дело?
     
Загрузка...
Похожие Темы - Работа C++ Библиотекой
  1. acs-nexus
    Ответов:
    0
    Просмотров:
    88
  2. acs-nexus
    Ответов:
    0
    Просмотров:
    163
  3. acs-nexus
    Ответов:
    0
    Просмотров:
    235
  4. acs-nexus
    Ответов:
    0
    Просмотров:
    380
  5. sgfsdg
    Ответов:
    1
    Просмотров:
    423

Поделиться этой страницей