VB에서 윈도 API를 이용하는 것을 델파이7로 변환하려는데 string(10,0)이라는게 변환이 어렵네요.
VB에서 str=string(10,0)은 포인터쪽에서 값을 받아오기 전에 변수를 초기화하는 것이라는 데
델파이로 변환하려면 배열을 써서 fillchar(str, 10, 0); 하는 것이 맞는 것인지...
문제는 GetPrivateProfileString('Test', 'FName', '', Pchar(str), 10, PChar(FPath));가 에러가 나네요.
VB에서는 같이 취급하는것 같은데 델파이에서는 문자배열과 문자열이 다른가 보네요.
VB : Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Delphi : function GetPrivateProfileString(lpApplicationName,lpKeyName,lpDefault, lpReturnedString : PChar; nSize : LongInt; lpFileName : PChar) : LongInt; stdcall; external 'kernel32.dll';
=끝=
type
DirectoryType = (_WINDOWS, _TEMP, _SYSTEM, _CURRENT);
function GetDirectory(Dir: DirectoryType): string;
var
Path: array [0..260] of Char;
begin
case Dir of
_WINDOWS: GetWindowsDirectory(Path, Sizeof(Path));
_SYSTEM : GetSystemDirectory(Path, Sizeof(Path));
_TEMP : GetTempPath(Sizeof(Path), Path);
_CURRENT: GetCurrentDirectory(Sizeof(Path), Path);
end;
Result := StrPas(Path);
end;
위 코드는 윈도우 시스템 폴더 및 임시 폴더 등등을 구해오는 함수 입니다. 이곳에서 Char를 Array형태로 사용한것을 보시면 그대로 활용 하실 수 있을것 같습니다.
말씀하신 GetPrivateProfileString 의 사용법은 아래를 참조하세요.
스크린세이버 파일경로 구하기
function GetScreenSaveFilename: string;
var
Buffer: array[0..2047] of Char;
begin
SetString(Result, Buffer,
GetPrivateProfileString(PChar('boot'), PChar('SCRNSAVE.EXE'), PChar(''),
Buffer, SizeOf(Buffer), PChar('SYSTEM.INI')));
end;
//실행.
ShellExecute(0, NIL, PCHAR(GetScreenSaveFilename), NIL, NIL, 1);