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;