Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Cappa
0 / 0 / 0
Регистрация: 24.04.2010
Сообщений: 7
1

Работа с C++ библиотекой из PHP расширения

29.08.2012, 16:44. Просмотров 769. Ответов 1
Метки нет (Все метки)

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

Проблема в следующем: есть простейшее 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
1
2
3
<?php 
    echo mul(5, 4);
?>
Здесь экстеншен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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++
1
2
3
4
5
6
7
8
9
10
namespace MathFuncs
{
    class Math
    {
    public:
            static __declspec(dllexport) double Mul(double a, double b);
 
        static __declspec(dllexport) double Div(double a, double b);
    };
}
и тело:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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;
    }
}
В чем может быть дело?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 16:44
Ответы с готовыми решениями:

Работа с библиотекой
Ребят помогите пожалуйста, 1 курс всего. Я создал библиотеку, работаю в ней, но...

Работа с библиотекой
Есть динамическая библиотека, как вызвать фукцию которая храниться в...

Работа с библиотекой
В чем ошибка? 1.unit2.pas(57,58) Error: Fields cannot appear after a method or...

Работа с библиотекой
Нужно создать 3 функции в библиотеке по имени, по индексу, по совпадающему...

Работа с GD библиотекой
Как можно реализовать передачу изображения созданного с помощью GD библиотеки в...

1
Pozitron_pozit
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 1
30.08.2013, 09:51 2
не видит функцию mul.
твой mul() ведь метод класса. Math
мб потому что ты его в голом виде пытаешся вызвать?

Добавлено через 3 минуты
PHP_FUNCTION
поменяй на ZEND_FUNCTION
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 09:51

Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Определить количество подведенного и отведенного тепла, работу сжатия, работу...

Работа с библиотекой jackcess
Доброго времени суток. Хочу написать программу, которая являла бы собой базу...

Работа с библиотекой opencv
Добрый день! Я установил opencv 2.4.13 на vs12, настроил несколько раз, но у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru