Bug #72922 [Opn->Csd]: COM called from PHP does not return out parameters
Edit report at https://bugs.php.net/bug.php?id=72922&edit=1
ID: 72922
Updated by: ab@php.net
Reported by: mistr111 at yahoo dot com
Summary: COM called from PHP does not return out parameters
-Status: Open
+Status: Closed
Type: Bug
Package: COM related
Operating System: Windows Server 2008 R2 Standard
PHP Version: 7.0.10
Block user comment: N
Private report: N
New Comment:
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=392c5ea472145a8f15b78376d0ab155b16bbab43
Log: Fixed bug #72922 COM called from PHP does not return out parameters
Previous Comments:
------------------------------------------------------------------------
[2016-08-23 07:23:03] mistr111 at yahoo dot com
Hello, thanks for responding so quickly.
COM registration:
regsvr32 comTest.dll
comTest.dll is created in Embarcadero® Delphi 10 Seattle Version 23.0.21418.4207
(I have used COM objects created even in older versions of Delphi for almost a decade and it worked
fine).
comTest.dll was created just for testing purposes. I tested this exact version today with php 5.6 on
the same server and it worked OK.
Then with proper VC14 Win32 version of Apache and VC14 x86 PHP 7.0.10 and it returns correct result,
but in/out parameters keep input values instead of values provided inside COM.
I will send you an e-mail with the Delphi project (contains dlls - both Wind32 and Win64 versions)
and description of both php and apache setups(I do not know how to enclose it here).
The php test script and outputs for both versions will be enclosed. Both setups use 32-bit versions
but results for 64-bit versions are the same.
Method in COM object:
function TcomTestIF.test(const Param1: WideString; var Param2, Param3: WideString): WideString;
var res : string;
begin
res := 'Param1=' + Param1 + '; Param2=' + Param2 + '; Param3=' +
Param3;
Param2 := 'Output text Param2';
Param3 := 'Output text Param3';
Result := res;
end;
------------------------------------------------------------------------
[2016-08-22 17:04:21] ab@php.net
Thanks for the report. Please post the test class, or better a test project, along with the way you
register the class and other setup. Also need the current/expected output to compare.
Thanks.
------------------------------------------------------------------------
[2016-08-22 14:55:50] mistr111 at yahoo dot com
Description:
------------
I have a problem concerning COM support in PHP 7.
I have been using COM called from PHP applications for a very long time.
After calling new COM(... , I used to call methods with several in/out parameters.
The result is used just to check status of the call but data is extracted from in/out parameters.
Everything has worked just fine in different PHP versions for almost a decade till I tried PHP 7.
I am able to call methods and can access results without problems, but in/out parameters stay the
same after the call.
I carried out tests on the same machine with PHP 5.6 and everything worked OK.
When I switched to PHP 7 or beta PHP 7.1, output parameters were unaffected only result was
correctly filled out.
(It did not matter whether I used 32-bit or 64-bit versions).
I used Windows Server 2008 R2 Standard for testing.
Binaries for PHP from http://windows.php.net/download/ and http://windows.php.net/qa/ (PHP 7.0.10 - VC14 x86 Thread Safe,
VC14 x64 Thread Safe and PHP 7.1.0 beta2)
For Apache from https://www.apachelounge.com/download/ (Apache
2.4.23 Win64, Apache 2.4.23 Win32)
with appropriate,latest C++ Redistributables installed
I combined 32-bit versions of COM, Apache, PHP and then 64-bit versions with the same result.
Test script:
---------------
<?php
$comTest = new COM("comTest.comTestIF") or die("Unable to instantiate comTest");
$parIn="111";$parOut1="";$parOut2="";
$result = $comTest->test($parIn,$parOut1,$parOut2);
// after the call $parOut1,$parOut2 parameters are unaffected although they are changed inside com.
Only result is correct
?>
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72922&edit=1
Thread (7 messages)