Problem in Win32api.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux