Работа из VC++ с базой 1С83 через V83.COMConnector
От: SANblCH_SAN  
Дата: 12.02.15 11:43
Оценка:
Прошу помочь дописать программу VC++ 2010 MFC:

соединение с базой 1C выполняется а как дальше, как какие-нибудь данные получить? как выполнить в базе 1с внешнюю обработку?

void CMy1С_V83_COMConnectorDlg::OnBnClickedButton1()
{
    //для начала инициализируем COM
    HRESULT hr = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
    if(FAILED(hr))
    {
      AfxMessageBox(_T("Невозможно инициализировать COM!"));
      return;
    }
    CLSID cls8;
    hr = CLSIDFromProgID(L"V83.COMConnector",&cls8);
    if(FAILED(hr))
    {
      AfxMessageBox(_T("Переустановите 1С Предприятие!"));
      CoUninitialize();
      return;
    }
    IDispatch *pv8 = NULL;
    hr = CoCreateInstance(cls8,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(void**)&pv8);
    if(FAILED(hr)  ||  !pv8)
    {
      AfxMessageBox(_T("Невозможно инициализировать 1С Предприятия")); 
      CoUninitialize();
      return;
    }       
       DISPID dispIDInitialize;
       OLECHAR * init = L"Connect";
       hr = pv8->GetIDsOfNames(IID_NULL,&init,1,LOCALE_SYSTEM_DEFAULT,&dispIDInitialize);
        if (FAILED(hr))
        {
            AfxMessageBox(_T("Не удалось получить ID от Initialize"));
            if (pv8) pv8->Release();
            CoUninitialize();
            return;
        }
        // Connect принимает только 1 параметр
        VARIANT VarResult;//указатель на интерфейс IDispatch
        VarResult.vt=VT_EMPTY;
       DISPPARAMS args = {NULL,NULL,0,0};
       args.rgvarg = new VARIANT[1];
       args.cArgs = 1;

       VariantInit(args.rgvarg);
       args.rgvarg[0].vt = VT_BSTR;
       args.rgvarg[0].bstrVal = SysAllocString(L"File=\"C:\\base\";Usr=\"Администратор\""); 
       hr = pv8->Invoke(dispIDInitialize,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&args,&VarResult,NULL,NULL);
              if (FAILED(hr))
        {
            AfxMessageBox(_T("Невозможно подключиться к базе 1С Предприятия"));
            if (pv8) pv8->Release();
            CoUninitialize();
            return;
        }        
        VarResult.vt=VT_EMPTY;
        pv8->Release();
       CoUninitialize();
       SysFreeString(args.rgvarg[0].bstrVal);
       delete [] args.rgvarg;
}
Отредактировано 12.02.2015 11:46 SANblCH_SUN . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.