Bug #11658 Updated: Getting values by reference don't work

From: Date: Fri, 06 Jul 2001 00:43:44 +0000
Subject: Bug #11658 Updated: Getting values by reference don't work
Groups: php.dev 
Request: Send a blank email to php-dev+get-59039@lists.php.net to get a copy of this message
ID: 11658 Updated by: phanto Reported By: andrej.aschenbrenner@face.de Status: Open Bug Type: COM related Operating system: PHP Version: 4.0.6 Assigned To: Comments: but by definition every interface derived from IDispatch that should support references must expect VARIANT *var instead of <anothertype> *var . am i wrong ? Previous Comments: --------------------------------------------------------------------------- [2001-07-02 05:08:05] andrej.aschenbrenner@face.de I think it's very simple. The COM-Object that I use is compiled with Microsoft Visual C++ 6.0, if it matters. The definition looks like this: interface ICObject: IDispatch { [id(1), helpstring("Methode Init")] HRESULT Init(BSTR bstrUser, long lwinID, BSTR bstrCustomer); [id(2), helpstring("Methode CheckLogin")] HRESULT CheckLogin(BSTR bstrUser, BSTR bstrServer, long *laccess); [id(3), helpstring("Methode CloseData")] HRESULT CloseData(); }; Note, that there is no VARIANT Type! It's only BSTR and LONG. So I get always a type mismatch, when I try to pass variables with $var = new VARIANT(8, VT_I4|VT_BYREF); or $var = new VARIANT("test", VT_BSTR); It doesn't matter, if it's passed by reference or not. I think it's a more general problem. PHP tries to pass the values as type VARIANT, but the interface is of another type (here BSTR or LONG). Of course, I could be wrong. When I pass the values directly as PHP-variables, then I don't get the type-mismatch warning, but the variables passed by reference don't change, as you can see in the first message. I hope, I maked it clear. --------------------------------------------------------------------------- [2001-07-01 17:25:28] phanto@php.net type mismatch means, that your com object expects another type. as you see the error message is german so the error doesn't happen in php but in the com-marshaller. you have to check what type your object expects and change the VT_I4 to the corresponding value. if you can provide me an other example so that i can reproduce this on my machine i could help you more detailed --------------------------------------------------------------------------- [2001-06-28 03:12:59] andrej.aschenbrenner@face.de still closed? --------------------------------------------------------------------------- [2001-06-27 04:16:21] andrej.aschenbrenner@face.de It didn't work! I get this: Warning: Invoke() failed: Typ paßt nicht. in D:wwwwebzeapplicationindex.php on line 10 translated: ...: Type mismatch. Line 10 looks like this: $instance->CheckLogin($user, COM_REMOTE_SERVER, $allowed); I have tried all of the combinations I could think of, VT_UI1|BYREF, VT_UI2|BYREF, VT_UI4|BYREF, VT_I1|BYREF, VT_I2|BYREF, VT_I4|BYREF, VT_INT|BYREF, VT_UINT|BYREF It doesn't matter. I get always the same type mismatch warning. Note that the variable $allowed in the function of the COM-Object is defined as "long". Please help me to get this working. --------------------------------------------------------------------------- [2001-06-26 10:19:19] phanto@php.net closed --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=11658&edit=2

« previous php.dev (#59039) next »