Hi

I try to register and call some functions of my own dll. After working (and
failing) with PHP 4.3.3 I tried the new PHP 5.0.0b1. I was suprised to see
that it didn't work much better, some errors still remain.

In (win32, invokefunction) following variables are declared:
        void *w32api_return_buffer = NULL;
        int w32api_return_buffer_size = 0;
        zval **func_arguments = NULL;

func_arguments gets later filled with
                if(zend_get_parameters_array_ex(argc, &func_arguments) == FAILURE)

But this only works if there are not more than one arguments. If there are two or more
the values get filled in w32api_return_buffer_size (second) and w32api_return_buffer
(third) etc...
I hardly believe that this was the intention. I temporarily fixed it by declaring
func_arguments as array like func_arguments[10] so it will work for up to ten
arguments, but I guess the right solution should be better than that.


In PHP4 was an error where it always crashed in zend_hash_find when I tried to
register more than 6 functions. This seems to be solved in PHP5 now.



On the other hand I got a new problem in PHP5 that wasn't there in PHP4.
In zend_std_get_method there's a variable
        zend_function *fbc;

being filled later with
        if (zend_hash_find(&zobj->ce->function_table, lc_method_name, method_len+1, 
(void **)&fbc) == FAILURE) {

Then comes a check for access rights:
        if (fbc->op_array.fn_flags & ZEND_ACC_PUBLIC) {

The problem now is that these flags (and many more members of op_array) are
bogus like 0xcccccccc. If I fill in by hand the value for ZEND_ACC_PUBLIC (0x100)
then it works.
I then tried to find out how I could tell from the beginning, what rights a function 
has.
The registerfunction in Win32api.c has a second argument 'flags' which is nowhere
explained. I just tried and filled in the 0x100 but to no avail. So:
1. What is this second argument 'flags' in registerfunction for?
2. How can I register a function with public access rights? (Do I even have to?)



And to round it up I always get errors in the end for zend_hash_destroy. Looks like
there are some problems with the memory handling.


I hope this info is useful for some developers to fix it.

F. Cenedese
INDEL AG

-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to