내가 가지고있는이 기능이 작동하지 않습니다 :에서 SHGetFolderPath 날
function GetProfilePath: string;
const
SHGFP_TYPE_CURRENT = 0;
var
hToken: THandle;
ProfilePath: packed array[ 0..MAX_PATH ] of Char;
begin
ZeroMemory(@ProfilePath[0], SizeOf(ProfilePath));
OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken);
SHGetFolderPath(0, CSIDL_APPDATA, hToken , SHGFP_TYPE_CURRENT, @ProfilePath[ 0 ]);
CloseHandle(hToken);
Result := ProfilePath;
end;
에서 SHGetFolderPath는 E_FAIL (0X80004005)와 빈 PROFILEPATH 버퍼를 반환합니다. MSDN에 따르면 E_FAIL은 "nFolder의 CSIDL은 유효하지만 해당 폴더가 존재하지 않음"을 의미합니다. 그러나 폴더는 존재합니다. 저는 꽤 확신합니다. 간단한 테스트 응용 프로그램을 만들고 동일한 코드를 실행하면 잘 작동합니다.
무엇이 잘못되었을 수 있습니까?
업데이트 : Delphi에서 실행할 때 내 응용 프로그램이 제대로 작동하지 않는 것으로 나타났습니다. 별도로 실행하면 모두 정상입니다.
감사합니다, 로마
** 모든 API 호출에서 반환 값을 확인해야합니다 **. – OnTheFly