![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу сохранить ресурс в файл [D5, Win2k]
Reyst © (2001-12-16 15:56:00)Уважаемые мастера! Пишу на C++, но понадобилось написать программу на Delphi.
В нижеприведенном коде при выполнении "игнорируются" две строки,
помеченные !!!, несмотря на то, что код для них генерируется
(в браузере кода строки отмечены синей точкой, оптимизация отключена).
Вопрос: почему? Подозреваю, что собака зарыта в StrCat,
т.к. не до конца разобрался со строками в Паскале,
несмотря на явное родство PChar с "сишными" строками.
(FullPath - глобальная переменная, PChar)
function DoResource(Instance: HModule; ResType: PChar;
ResName: PChar; Param: Longint): BOOL; stdcall;
var
Res: TResourceStream;
FileName: PChar;
begin
GetMem(FileName, 255);
FileName^ := Chr(0);
Res := TResourceStream.Create(Instance, ResName, ResType);
!!! FileName := StrCat(FullPath, ResName);
!!! Res.SaveToFile(FileName);
Res.Free;
DoResource := true;
end;
PVR (2001-12-16 22:22:00) [1]function DoResource(Instance: HModule; ResType: PChar;
ResName: PChar; Param: Longint): BOOL; safecall{!!!!!!};
var
FileName: string;
begin
GetMem(FileName, 255);
try
FileName := "";
with TResourceStream.Create(Instance, ResName, ResType) do
try
!!! FileName := FullPath+string(ResName);
!!! SaveToFile(FileName);
finally
Res.Free;
end;
DoResource := true;
finally
freemem(filename);
end
end;
Reyst (2001-12-16 20:03:00) [2]> MrBeer.
А так и было. Просто я на время поиска глюка все убрал по максимуму.
Спасибо!
MrBeer (2001-12-16 19:59:00) [3]+ zhelatelno
vmesto StrCat polzovatj StrLCat& tryblock sdelatj.
best regards.
MrBeer (2001-12-16 19:54:00) [4]//......
FileName := StrAlloc(512);
Res := TResourceStream.Create(Instance, ResName, ResType)
StrCopy(FileName, FullPath);
StrCat(FileName, ResName);
Res.SaveToFile(StrPas(FileName));
Res.Free;
StrDispose(FileName);
//......
PVR (2001-12-16 19:35:00) [5]function DoResource(Instance: HModule; ResType: PChar;
ResName: PChar; Param: Longint): BOOL; safacall{!!!!!!};
var
Res: TResourceStream;
FileName: PChar;
begin
GetMem(FileName, 255);
try
FileName^ := Chr(0);
with TResourceStream.Create(Instance, ResName, ResType) do
try
!!! FileName := StrCat(FullPath, ResName);
!!! SaveToFile(FileName);
finally
Res.Free;
end;
DoResource := true;
finally
freemem(filename);
end
end;