OPCAddItems函数调用抛出“指定的数组不属于需要的类型" 点击:1472 | 回复:4



大秋秋

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 9回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2015年9月06日
发表于:2016-11-10 11:35:07
楼主

用VB6编写没有问题,可以通过。

用VS2013编写就报错误

提示“指定的数组不属于需要的类型"


请问有什么问题解决么?是64位系统不兼容的问题么?




honest3729

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 12回
  • 年度积分:0
  • 历史总积分:175
  • 注册:2010年9月29日
发表于:2017-02-20 17:34:54
1楼

解决了吗?怎么解决的?

tanglibobo

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:0
  • 历史总积分:173
  • 注册:2016年3月30日
发表于:2019-04-26 00:26:11
2楼

有人知道吗,同样的问题,好几天了。不知道原因

casy1987

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 4回
  • 年度积分:0
  • 历史总积分:72
  • 注册:2010年7月09日
发表于:2019-05-05 17:21:16
3楼

同问!解决了吗?怎么解决的?

OPC那点事

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 41回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2015年4月25日
发表于:2019-05-06 01:55:40
4楼

我的博文中有类似的例子,与vs2013无关,我用vs2013/17/19都没问题,关键是检查返回的每一个error来知道具体原因。


HRESULT hResult = pOPCItemMgt->AddItems(dwCount, pItems, pResults, pErrors);

if (FAILED(hResult) || hResult == S_FALSE)

{

for (DWORD ii = 0; ii < dwCount; ii++)

{

if (*pErrors && FAILED((*pErrors)[ii])) {

if (((*pErrors)[ii]) == OPC_E_UNKNOWNITEMID || ((*pErrors)[ii]) == OPC_E_INVALIDITEMID)

_tprintf(_T("%S: not exist, try using a full path tag name\n"), pItems[ii].szItemID);

else

_tprintf(_T("%S failed\n"), pItems[ii].szItemID);

}

}

}


如果服务端是用OPC SDK来开发的,在COpcDaGroupWrapper.cpp中放置断点在COpcDaGroupWrapper::AddItems()来找到具体原因。


这一篇博文中有用AddItems,供你参考,


OPC客户端分析 —— 读和写


其它博文,


从回调函数谈OPC SDK的代码质量


OPC服务器到底安不安全?


COM的起源与OPC的渊源


OPC客户端分析 —— 服务器查询


OPC服务器是如何被找到的?





热门招聘
相关主题

官方公众号

智造工程师