|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2012-09-27 08:41 UTC] gospodin dot p dot zh at gmail dot com
[2012-09-27 08:47 UTC] pajoye@php.net
-Status: Open
+Status: Not a bug
[2012-09-27 08:47 UTC] pajoye@php.net
[2012-09-27 09:38 UTC] gospodin dot p dot zh at gmail dot com
[2012-09-27 09:56 UTC] pajoye@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 17:00:01 2025 UTC |
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