Thanks for your response, but I'm unable to make it work. I have changed the code, and it works with strings and even with arrays, but not with hashes: Am I missing something?
zval *hash; zval **args[2], *func, *retval; zval *str; MAKE_STD_ZVAL(retval); MAKE_STD_ZVAL(func); ZVAL_STRING(func, estrdup(handler), 0); MAKE_STD_ZVAL(str); ZVAL_STRING(str, estrdup(m->sender), 0); MAKE_STD_ZVAL(hash); ALLOC_HASHTABLE(hash); zend_hash_init(hash, 0, NULL, NULL, 1); g_hash_table_iter_init (&iter, m->params); while (g_hash_table_iter_next (&iter, &key, &value)) { zend_hash_add(hash, g_strdup(key), strlen(key), g_strdup(value), strlen(value), NULL); } args[0] = &hash; args[1] = &str; if (call_user_function_ex(EG(function_table), NULL, func, retval, 2, &args, 0, NULL TSRMLS_CC) == FAILURE) { g_debug("error calling method: %s", handler); } ... Thanks a lot! AntP 2008/9/8 Marcus Boerger <[EMAIL PROTECTED]> > Hello mr, > > Monday, September 8, 2008, 6:58:19 PM, you wrote: > > > Hi all, > > I'm having problems passing an array to the function call_user_function > as > > parameter. This is the code: > > > zval *args[3], *func, *retval; > > args maust be *** not ** > > > MAKE_STD_ZVAL(func); > > MAKE_STD_ZVAL(retval); > > MAKE_STD_ZVAL(args[0]); > > MAKE_STD_ZVAL(args[1]); > > MAKE_STD_ZVAL(args[2]); > > ALLOC_HASHTABLE(args[2]); > > > // creates hash and fills > > zend_hash_init(args[2], 0, NULL, NULL, 0); > > g_hash_table_iter_init (&iter, m->params); > > while (g_hash_table_iter_next (&iter, &key, &value)) { > > zend_hash_add(args[2], key, strlen(key), value, strlen(value), > > NULL); > > } > > > ZVAL_STRING(args[0], estrdup(m->sender), 0); > > ZVAL_STRING(args[1], estrdup(m->cmd), 0); > > ZVAL_STRING(func, estrdup(handler), 0); > > > if (call_user_function(EG(function_table), > > NULL, > > func, > > retval, 3, > > args TSRMLS_CC) == FAILURE) { > > g_debug("error calling method: %s", handler); > > } > > > zval_dtor(retval); > > zval_dtor(func); > > zval_dtor(args[0]); > > zval_dtor(args[1]); > > zend_hash_destroy(args[2]); > > FREE_HASHTABLE(args[2]); > args[2] is wrong and anyway all three need to be zval_ptr_dtor() > > marcus > > > I suppose that the problem is the conversion between the Hash and the > zval, > > but I don't know how to do it. > > > Thanks in advance :) > > regards > > > > Best regards, > Marcus > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > >