Я работаю над проектом связи OPC в Windows 10. (клиент VS10 C ++ для сервера Rexroth OPC)
Я подключаю сервер и добавляю группу, но у меня проблема в следующей функции AddAllItems.
void AddAllItems(IOPCItemMgt* pIOPCItemMgt, item_container &ITEMS)
{
HRESULT hr;
OPCHANDLE hServerItemTMP;
size_t m;
char buf[100];
//vector<OPCITEMDEF*> AllItemsArray(ITEMS.item_types.size());
for(int i=0; i<(int)ITEMS.item_types.size(); i++) {
wcstombs_s(&m, buf, 100, ITEMS.vecwc_Item_IDs[i], _TRUNCATE);
printf("Adding the item %s to the group...\n", buf);
ITEMS.hItem_IDs.push_back(i+1);
// Array of items to add:
OPCITEMDEF ItemArray[] =
{{/*szAccessPath*/ L"",
/*szItemID*/ ITEMS.vecwc_Item_IDs[i],
/*bActive*/ TRUE,
/*hClient*/ ITEMS.hItem_IDs[i],
/*dwBlobSize*/ 0,
/*pBlob*/ NULL,
/*vtRequestedDataType*/ VT,
/*wReserved*/0
}};
//AllItemsArray.push_back(ItemArray);
//Add Result:
OPCITEMRESULT* pAddResult=NULL;
HRESULT* pErrors = NULL;
// Add an Item to the previous Group:
hr = pIOPCItemMgt->AddItems(1, ItemArray, &pAddResult, &pErrors);
if (hr != S_OK){
printf("Failed call to AddItems function. Error code = %x\n", hr);
exit(0);
} else { printf("AddItems function worked\n"); }
// Server handle for the added item:
hServerItemTMP = pAddResult[0].hServer;
vec_hServerItem.push_back(hServerItemTMP);
// release memory allocated by the server:
CoTaskMemFree(pAddResult->pBlob);
CoTaskMemFree(pAddResult);
pAddResult = NULL;
CoTaskMemFree(pErrors);
pErrors = NULL;
}
}
Этот код следует за блоком if и завершается. Почему я не могу добавить элемент в группу? Если я смотрю файл журнала сервера, я вижу «Клиент подключен к серверу».
hr = pIOPCItemMgt->AddItems(1, ItemArray, &pAddResult, &pErrors);
if (hr != S_OK){
printf("Failed call to AddItems function. Error code = %x\n", hr);
exit(0);
} else { printf("AddItems function worked\n"); }
Код ошибки = 80004005
ч = E_FAIL
Я использую любое тестовое клиентское приложение на этом сервере (чтение и запись). Однако я читаю все данные на сервере моделирования Matrikon или Graybox, используя этот код клиента.
Где я делаю ошибку? Спасибо за сейчас.