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, получить корректный ответ и его потом вернуть из своей функции ? Есть ли какие-то примеры подобной реализации ?
Заранее всем спасибо за помощь.
С уважением,
Игорь
	            