我正在Windows 10上运行OPC通信项目(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 hr = E_FAIL
我在该服务器上使用任何测试客户端应用程序(读写)。但是,我使用此客户端代码读取了Matrikon或Graybox模拟服务器上的所有数据。
我在哪里出错?谢谢你。