Добрый день.
Ситуация такая, добавляю ресурсы в исполняемый файл с помощью следующей функции
function WriteRes_SetName(Filename: PChar; Settings: PSettings; NameSection:Pchar): boolean;
var
hResource: THandle;
begin
Result := False;
hResource := BeginUpdateResource(Filename, False);
if hResource <> 0 then
begin
if UpdateResource(hResource, RT_RCDATA, NameSection, 0, Settings,
SizeOf(Settings^)) then
Result := True;
EndUpdateResource(hResource, False);
end;
end;
Вызываю так:
if not WriteRes_SetName(PAnsiChar(FileName), CreteParam, PChar(SectionName)) then
begin
ShowMessageLabel('err.', 2, 5);
exit;
end;
Код вызова функций в windows.pas
function BeginUpdateResource(pFileName: PChar; bDeleteExistingResources: BOOL): THandle; stdcall;
function UpdateResource(hUpdate: THandle; lpType, lpName: PChar;
wLanguage: Word; lpData: Pointer; cbData: DWORD): BOOL; stdcall;
function EndUpdateResource(hUpdate: THandle; fDiscard: BOOL): BOOL; stdcall;
где SectionName рандомно генерирующееся стринговое значение длиной 5-7 символов.
Проблема в том что под windows 7 запись проходит нормально. Каждый раз при вызове создаются новые ресурсы с переданым именем.
Если же код исполняется под XP каждая новая запись затирает предыдущую, а не добавляет новый ресурс.
Смотрел в MSDN
BeginUpdateResource(Filename, False); - False (не затирать)
EndUpdateResource(hResource, False); - False (не затирать)
Все верно вроде.
Если же мы под XP передаем фиксированное значение, например
WriteRes_SetName(PAnsiChar(FileName), CreteParam, PChar,'1');
WriteRes_SetName(PAnsiChar(FileName), CreteParam, PChar,'2');
WriteRes_SetName(PAnsiChar(FileName), CreteParam, PChar,'3');
То все 3 секции будут созданы как не в чем не бывало.
Т.е Такое чувство что неправельно передаю Pchar