[델파이] 해제되는 핸들이 어떻게 든 손상 되었습니까?
각 바이트를 메모리 스트림에 쓰기 전에 용량을 비트 스트림의 대략적인 크기로 설정하여 메모리 크기를 자주 조정하지 않도록합니다. 속도가 빨라집니다.
for 루프의 높이와 너비에서 1을 빼야한다고 생각합니다.
건배
-------------------모든 힌트들에게 감사드립니다. 루프는 코드에서 0에서 너비 1까지 정확했습니다.
문제는 너비와 높이에 대한 변수가 기본 양식의 크기가 조정될 때 응용 프로그램의 다른 곳에서 변경된 전역이라는 것이 었습니다 (일반적으로 화면에 표시된 이미지를 추적하지만이 절차 내에서 동일한 변수를 사용하여 메모리 스트림 비트 맵 너비를 추적했습니다.) 그래서 그들이 루프 외부에서 변경되었을 때 출력이 망가 져서 출력이 손상되었습니다. 추적해야 할 문제의 문제입니다. 일단 너비와 높이 변수를 지역화하면 모든 것이 예상대로 작동합니다.
델파이 문제가 아니라 내 오류임을 알았어 야했습니다.
-------------------쓰기에 사용 된 파일 스트림을 해제하면 파일 닫기 호출에서 오류가 확인되지 않습니다. 따라서 큰 파일의 마지막 블록을 플러시 할 때 쓰기가 실패 할 수 있으며 예외가 발생하지 않습니다.
최근에이 문제에 부딪 혔습니다. QC 80148에 있습니다. 그러나 Windows CloseHandle 함수도 오류를 반환 할 가능성이 없기 때문에 할 수있는 일이 많지 않습니다.
-------------------무슨 일이 일어나고 있는지 가정하는 것만으로는 그러한 오류를 찾기가 어렵습니다. 작업이 너무 길기 때문에 오류가 발견되면 반복하고 기다리는 데 비용이 많이 듭니다.
프로세스의 모든 단계를 기록하는 것이 좋습니다. 아마도 방대한 로그를 얻게 될 것이지만 어디에서 문제가 발생했는지 보여줄 것입니다. 프로세스를 반복하고 로그를 개선하면 문제의 원인을 천천히하지만 확실하게 찾을 수 있습니다.
-------------------API 호출 FlushFileBuffers(filestream.Handle)
을 사용하여 tFileStream을 플러시 할 수 있지만, 제 생각에는 처음에 손상을 일으키는 다른 일이 발생하는 것 같습니다. 루프가 1에서 너비로 또는 0에서 너비로가 아니라 0에서 너비로 이동하는 것처럼 간단 할 수 있습니다. -1 ... 루틴이 메모리 스트림을 채우기 위해 수행하는 작업을 분석하지 않고는 말하기 어렵습니다.
출처
https://stackoverflow.com/questions/1904991