Edit report at https://bugs.php.net/bug.php?id=63164&edit=1
ID: 63164
Updated by: pajoye@php.net
Reported by: gospodin dot p dot zh at gmail dot com
Summary: PHP extension for COM connection
-Status: Open
+Status: Not a bug
Type: Bug
Package: COM related
Operating System: Windows
PHP Version: 5.4.7
Block user comment: N
Private report: N
New Comment:
hi!
Please ask support questions about php extension development on the PECL developer
mailing list.
Btw, why not contribute to the existing COM extension instead?
Previous Comments:
------------------------------------------------------------------------
[2012-09-27 08:41:54] gospodin dot p dot zh at gmail dot com
i've checked memory dump, seems like strings were additionally processed for
slashes as escape sequences. Here is print screen
http://imageshack.us/a/img10/2097/phpu.gif
------------------------------------------------------------------------
[2012-09-26 14:28:45] gospodin dot p dot zh at gmail dot com
Description:
------------
char* Connect1c77(char* dir, char* username, char* password, bool
no_splash_screen){
//Ð´Ð»Ñ Ð½Ð°Ñала иниÑиализиÑÑем
COM
HRESULT hr = CoInitialize(NULL);
if(FAILED(hr))
{
return"Ðевозможно
иниÑиализиÑоваÑÑ COM!";
return FALSE;
}
CLSID cls77;
hr = CLSIDFromProgID(L"V77M.Application", &cls77);
if(FAILED(hr))
{
return"ÐеÑеÑÑÑановиÑе 1С
ÐÑедпÑиÑÑие!";
CoUninitialize();
return FALSE;
}
IDispatch *pv77;
hr = CoCreateInstance(cls77, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch,
(void**)&pv77);
if(FAILED(hr) || !pv77)
{
return"Ðевозможно
иниÑиализиÑоваÑÑ
инÑеÑÑÐµÐ¹Ñ 1С ÐÑедпÑиÑÑиÑ";
CoUninitialize();
return FALSE;
}
VARIANT vRet;
DISPID dispIDRmTrade, dispIDInitialize;
DISPPARAMS args = {0, 0, 0, 0};
VARIANT vars[3]; // ÐаÑамеÑÑÑ Ð´Ð»Ñ Ð²Ñзова
Initialize
BSTR rmTrade = L"RMTrade";
hr = pv77->GetIDsOfNames(IID_NULL, &rmTrade, 1, 0, &dispIDRmTrade);
if (FAILED(hr))
{
return"Ðевозможно полÑÑиÑÑ ID оÑ
RMTrade";
if (pv77)
pv77->Release();
CoUninitialize();
return FALSE;
}
hr = pv77->Invoke(dispIDRmTrade, IID_NULL, 0, DISPATCH_PROPERTYGET,
&args,
&vars[2], NULL, NULL);
if (FAILED(hr))
{
return"Ðевозможно полÑÑиÑÑ
инÑеÑÑÐµÐ¹Ñ Ð¾Ñ RMTrade";
if (pv77)
pv77->Release();
CoUninitialize();
return FALSE;
}
//нÑжно полÑÑиÑÑ ID Ð´Ð»Ñ Initialize(..);
BSTR init = L"Initialize";
hr = pv77->GetIDsOfNames(IID_NULL, &init, 1, 0, &dispIDInitialize);
if (FAILED(hr))
{
return"Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ID оÑ
Initialize";
if (pv77)
pv77->Release();
CoUninitialize();
return FALSE;
}
args.cArgs = 3;
args.rgvarg = vars;
std::wstring path = L"/DC:\\Users\\Public\\Documents\\old\\Steklo\\ /Nya
/P185224";
vars[0] = _variant_t(no_splash_screen ? L"NO_SPLASH_SHOW" : L"");
vars[1] = _variant_t(path.c_str());;
hr = pv77->Invoke(dispIDInitialize, IID_NULL, 0, DISPATCH_PROPERTYGET,
&args,
&vRet, NULL, NULL);
if(FAILED(hr) || (vRet.vt == VT_BOOL && vRet.bstrVal == 0x00))
{
return"Ðевозможно запÑÑÑиÑÑ 1С
ÐÑедпÑиÑÑие";
}
return "ok";
}
Actual result:
--------------
This code work fine if compiled like Win32 application.
When i make it a part of PHP extension (dll) and call from PHP script started
program behaves like path
std::wstring path = L"/DC:\\Users\\Public\\Documents\\old\\Steklo\\ /Nya
/P185224";
is incorrect, but there is no any windows or messages of course. Stated program is
in memory has size like there exists only windows to enter correct path (such
window is shown if it's a win32 application, not a PHP extension).
Help me somehow please
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=63164&edit=1