안녕하세요. 델파이 공부를 하고 있는 초보 입니다. 책보면서 이것저것 만들어 보고 있는데요.
아래와 같은 문제로 더이상 진행이 안되어서 이렇게 고수님의 답변을 듣고자 글을 올립니다.
하나는 윈도우즈의 시스템 템프 디렉토리를 구하는 함수이고요. 나머지 하나는 진정한 템프 파일명을 구하는 함수입니다
function MinGetTempDir: string;
var
Path: array [0..MAX_PATH-1] of char;
begin
Windows.GetTempPath(sizeof(Path), Path); // 여기서 무순이유인지 다음으로 넘어가지 않고 에러가
Result := StrPas(Path); // 나타납니다.
end;
function MinGetTempFileName: TFileName;
var
TempFileName: array [0..MAX_PATH-1] of char;
begin
if Windows.GetTempFileName(PChar(MinGetTempDir), '~', 0, TempFileName) = 0 then
raise Exception.Create(SysErrorMessage(GetLastError));
Result := TempFileName;
end;
컴파일 시 아래와 같은 메세지 박스가 나타나는데 도통 이유를 모르겠습니다.
Project C:\WMI_H\Project1.exe faulted with message: 'access Violation at 0x7c95c936 : write of address 0x00030ffc', Process Stopped. Use Step or Run to continue.
GetTempPath는 Null-terminated string을 반환하는것이 아니기 때문에 StrPas에서 NULL문자를 못찾는다면 다른 메모리를 침범할 수가 있습니다.
GetTempPath함수 호출하기 전에 아래와 같이 0으로 채워주세요.
FillChar(Path, SizeOf(Path), 0);