neostar
Новичок
Всем привет.
Я создал расширение (DLL) для PHP 5.2.17 под Windows. В этом расширении есть одна тестовая функция. В этой функции я загружаю DLL другого расширения PHP и пытаюсь вызвать нужную мне функцию.
Пример кода представлен ниже:
Примечания:
function_name_that_we_need_to_call - имя функции, которая принимает строковое значение, а возвращает значение типа "ресурс"
handler - указатель на функцию расширения, которая в качестве входных параметров принимает макрос INTERNAL_FUNCTION_PARAMETERS:
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
Главный вопрос:
Какие параметры мне нужно передать в func->handler, чтобы от функции, которая находится в dll, получить корректный ответ и его потом вернуть из своей функции ? Есть ли какие-то примеры подобной реализации ?
Заранее всем спасибо за помощь.
С уважением,
Игорь
Я создал расширение (DLL) для PHP 5.2.17 под Windows. В этом расширении есть одна тестовая функция. В этой функции я загружаю DLL другого расширения PHP и пытаюсь вызвать нужную мне функцию.
Пример кода представлен ниже:
PHP:
ZEND_FUNCTION(test)
{
LPCWSTR test = TEXT("php_some_extension.dll");
HINSTANCE hGetProcIDDLL = LoadLibrary(test);
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL), "get_module");
typedef zend_module_entry * (__stdcall * pICFUNC)();
pICFUNC getModuleFunction = pICFUNC(lpfnGetProcessID);
zend_module_entry * module = getModuleFunction();
zend_function_entry * func = module->functions;
zval * input;
zval * result;
while (func->fname)
{
if (strcmp(func->fname, "function_name_that_we_need_to_call") == 0)
{
func->handler(1, input, &result, ???, 1, ???);
RETURN_RESOURCE(result);
}
func++;
}
}
function_name_that_we_need_to_call - имя функции, которая принимает строковое значение, а возвращает значение типа "ресурс"
handler - указатель на функцию расширения, которая в качестве входных параметров принимает макрос INTERNAL_FUNCTION_PARAMETERS:
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
Главный вопрос:
Какие параметры мне нужно передать в func->handler, чтобы от функции, которая находится в dll, получить корректный ответ и его потом вернуть из своей функции ? Есть ли какие-то примеры подобной реализации ?
Заранее всем спасибо за помощь.
С уважением,
Игорь