OPCDA客户端开发过程记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oWanMeiLuoMu/article/details/80305046

1. 遇到最大的问题是代码:
r1 = m_IOPCSyncIO->Read(OPC_DS_DEVICE, 1, phServer, &pItemValue, &pErrors);
返回有问题0x74AF1761 (rpcrt4.dll) (SynOpc.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x2B35FC13 时发生访问冲突。
分析:当类中某个参数未初始化,然后去取值,会报同样的错,是不是读数据的时候,数值没有初始化?

//内存分配


    phServer = new OPCHANDLE[1];
013C126E  push        4  
013C1270  call        operator new[] (013C4980h)  
013C1275  add         esp,4  
013C1278  mov         dword ptr [ebp-24h],eax  
013C127B  mov         edx,dword ptr [ebp-24h]  
013C127E  mov         dword ptr [phServer],edx  

    //通过server句柄选择item(由ADDItemt得到的)
    phServer[0] = m_ItemResult[0].hServer;
013C1281  mov         eax,14h  
013C1286  imul        ecx,eax,0  
013C1289  mov         edx,4  
013C128E  imul        eax,edx,0  
013C1291  mov         edx,dword ptr [phServer]  
013C1294  mov         esi,dword ptr ds:[13DB548h]  
013C129A  mov         ecx,dword ptr [esi+ecx]  
013C129D  mov         dword ptr [edx+eax],ecx  
    r1 = m_IOPCSyncIO->Read(OPC_DS_DEVICE, 1, phServer, &pItemValue, &pErrors);
013C12A0  lea         edx,[pErrors]  
013C12A3  push        edx  
013C12A4  lea         eax,[pItemValue]  
013C12A7  push        eax  
013C12A8  mov         ecx,dword ptr [phServer]  
013C12AB  push        ecx  
013C12AC  push        1  
013C12AE  push        2  
013C12B0  mov         edx,dword ptr ds:[13DB528h]  
013C12B6  mov         eax,dword ptr [edx]  
013C12B8  mov         ecx,dword ptr ds:[13DB528h]  
013C12BE  push        ecx  
013C12BF  mov         edx,dword ptr [eax+0Ch]  
013C12C2  call        edx  
013C12C4  mov         dword ptr [r1],eax  
    //r1 = m_IOPCSyncIO->Read(OPC_DS_CACHE, 1, phServer, &pItemValue, &pErrors);
    //释放内存
    delete []phServer;
展开阅读全文

没有更多推荐了,返回首页