Как вызвать php-функцию из php-расширения на C++

neostar

Новичок
Всем привет.

Я создал расширение (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, получить корректный ответ и его потом вернуть из своей функции ? Есть ли какие-то примеры подобной реализации ?

Заранее всем спасибо за помощь.
С уважением,
Игорь
 

tony2001

TeaM PHPClub
ох, не надо так делать, это очень, очень кривой способ.
используйте call_user_function().
 
Сверху