none
Пользование SafeArray RRS feed

  • Вопрос

  • Всем доброго времени суток!

    Имеется проблема: разрабатывается клиент для OPC-сервера. Сервер разработки Сименс.

    Сервер читает и записывает данные из/в контроллер. Клиент соответственно получает/передает эти данные из/в сервер. При атом используется технологи OLE, COM. Можно обмениваться как скалярными данными, так и массивами. Со скалярными данными все достаточно просто и работает. С массивами же закавыка: Сименс дал мне пример как прочитать массив, вот кусок кода:

    <!-- @page { size: 21.59cm 27.94cm; margin: 2cm } P { margin-bottom: 0.21cm } -->

    r1=pIOPCSyncIO->Read(OPC_DS_DEVICE,1,phServer,&pItemValue,&pRErrors);

    if(pItemValue[0].vDataValue.vt == (VT_ARRAY | VT_I2))

    {short int *pValues = NULL; int Readout[10];

    SafeArrayAccessData(pItemValue[1].vDataValue.parray, (void **)&pValues);

    for(int i=0; i<10; i++) Readout[i] = pValues[i];

    SafeArrayUnaccessData(pItemValue[1].vDataValue.parray);

    }

    VariantClear(&pItemValue[1].vDataValue);

    Как видно, здесь используются методы и структура SafeArray.

    А вот для того чтобы передать массив, надо соответственно сформировать структуру для записи.

    примерно, как я понимаю, код должен выглядеть так:

      VARIANT        values[1];
      HRESULT        *pWErrors;
      HRESULT         r1;
      LPWSTR         ErrorStr;
      float              step_S[250];// массив, который нужно записать
      phServer = new OPCHANDLE[1];
      phServer[0] = pItemResult[0].hServer;
      values[0].vt      = VT_SAFEARRAY;
      SAFEARRAYBOUND rgsabound[1];
      rgsabound[0].lLbound=0;
      rgsabound[0].cElements=250;
      values[0].parray=SafeArrayCreate(VT_R4,1,rgsabound);
      values[0].parray->pvData=(void *)&step_S[0];
      r1=pIOPCSyncIO4->Write(1,phServer,values,&pWErrors);

    однако это не проходит - видимо все-таки неправильно сформирована структура SafeArray, а как правильно, кто-нибудь знает?

     

    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:46 MSDN Forums consolidation (От:Разработка Windows-приложений)