OPCDA客戶端開發過程記錄

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章