将项目添加到组-OPC客户端

时间:2018-11-01 14:22:48

标签: visual-c++ opc dcom

我正在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模拟服务器上的所有数据。

我在哪里出错?谢谢你。

0 个答案:

没有答案