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
>
>

Reply via email to