Q&A

  • [질문] 시스템 템프 디렉토리 구하는 함수에서 에러문제!!
안녕하세요. 델파이 공부를 하고 있는 초보 입니다. 책보면서 이것저것 만들어 보고 있는데요.
아래와 같은 문제로 더이상 진행이 안되어서 이렇게 고수님의 답변을 듣고자 글을 올립니다.

하나는 윈도우즈의 시스템 템프 디렉토리를 구하는 함수이고요. 나머지 하나는 진정한 템프 파일명을 구하는 함수입니다


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.

2  COMMENTS
  • Profile
    최용일 2009.09.11 01:17
    에러가 발생한다면... StrPas에서 발생하지 않을까... 생각되는데요...
    GetTempPath는 Null-terminated string을 반환하는것이 아니기 때문에 StrPas에서 NULL문자를 못찾는다면 다른 메모리를 침범할 수가 있습니다.

    GetTempPath함수 호출하기 전에 아래와 같이 0으로 채워주세요.
    FillChar(Path, SizeOf(Path), 0);
  • Profile
    극상초보 2009.09.11 01:38
    최용일님 매번 감사 합니다.
    용일님이 하라는 방법대로 하니 잘동작합니다. ^^ 좋은 정보 감사합니다.