StalkerSoftware
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Hi All, Есть код который возвращает MAC-адрес от первой сетевой карты. Код: function GetMACAddress() :String; const MIB_IF_TYPE_OTHER = 1; MIB_IF_TYPE_ETHERNET = 6; MIB_IF_TYPE_TOKENRING = 9; MIB_IF_TYPE_FDDI = 15; MIB_IF_TYPE_PPP = 23; MIB_IF_TYPE_LOOPBACK = 24; MIB_IF_TYPE_SLIP = 28; MIB_IF_TYPE_WIRELESS = 71; const WORKING_BUFFER_SIZE = 15000; MAX_ITERATION = 3; var dwRetVal :Cardinal; pAddresses, pCurrAdress IP_ADAPTER_ADDRESSES; nOutBuff :Integer; ptr ointer; nIteration :Integer; begin Result := ''; nIteration := 0; nOutBuff := WORKING_BUFFER_SIZE; ptr := @nOutBuff; repeat pAddresses := PIP_ADAPTER_ADDRESSES(GlobalAlloc(GPTR, WORKING_BUFFER_SIZE)); dwRetVal := GetAdaptersAddresses(AF_UNSPEC, 0, nil, pAddresses, ptr); if dwRetVal = ERROR_BUFFER_OVERFLOW then begin GlobalFree(cardinal(pAddresses)); pAddresses := nil; end else Break; Inc(nIteration); until (dwRetVal = ERROR_BUFFER_OVERFLOW) and (nIteration <= MAX_ITERATION); if dwRetVal = NO_ERROR then begin pCurrAdress := pAddresses; while pCurrAdress <> nil do begin if pCurrAdress.IfType = MIB_IF_TYPE_ETHERNET then begin Result := Format('%.2x:%.2x:%.2x:%.2x:%.2x:%.2x', [pCurrAdress.PhysicalAddress[0], pCurrAdress.PhysicalAddress[1], pCurrAdress.PhysicalAddress[2], pCurrAdress.PhysicalAddress[3], pCurrAdress.PhysicalAddress[4], pCurrAdress.PhysicalAddress[5]]); Break; end; { if } pCurrAdress := pCurrAdress.Next; end; { while } GlobalFree(System.Cardinal(pCurrAdress)); end; { if } GlobalFree(System.Cardinal(pAddresses)); end; | В Delphi 10.4.2 он отрабатывает без ошибок. А вот в Delphi 11.0 он на строке "GlobalFree(System.Cardinal(pAddresses))" выдает ошибку Цитата: Debugger Fault Notification faulted with message: 'system exception (code 0xc0000374) at 0x775f6c43' | Вопрос: Что тут не так ? |