| 发表于:2007-04-13 11:47:17 楼主 |
用一个dll封装了几个iphlpapi.dll的函数 然后进行调用时,会报内存readerror 但如果用exe将封装单元引入,则完全正常,有没有大牛能帮我分析一下??? dllunit type parprec = ^tarprec; tarprec = record ip: string[15]; index: integer; mac: array[0..7] of byte; end; function _refresharptable: boolean; var i, j: integer; dwresult, dwsize: dword; p_arptable: pmibipnettable; p_arprow: pmibipnetrow; sztemp: string; parp: parprec; begin sztemp := ' '; p_arptable := nil; for i := 0 to _arptable.count - 1 do freemem( parprec( _arptable.objects[i] ) ); _arptable.clear; dwsize := 0; dwresult := getipnettable(p_arptable, dwsize, false); // if p_arptable = nil then //报错的就是这行 p_arptable := allocmem(dwsize); try if no_error = getipnettable(p_arptable, dwsize, false) then begin for i := 0 to p_arptable.dwnumentries - 1 do begin p_arprow := allocmem(sizeof(tmibipnetrow)); zeromemory(p_arprow, sizeof(tmibipnetrow)); move(p_arptable^.table[i], p_arprow^, sizeof(tmibipnetrow)); parp := allocmem( sizeof( tarprec) ); parp^.ip := inet_ntoa( in_addr( p_arprow^.dwaddr ) ); parp^.index := p_arprow^.dwindex; for j := 0 to 5 do parp^.mac[j] := p_arprow^.bphysaddr[j]; _arptable.addobject(parp^.ip, tobject( parp )); end; end; finally // if p_arptable <> nil then freemem(p_arptable); end; end; 错误信息: access violation at address 014663e2 in module 'arpwatch.dll ' write of address 0147fdcc 在线等待,不胜感谢!!! |
|
|
|
|