mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-23 10:09:14 +02:00
111 lines
2.6 KiB
ObjectPascal
111 lines
2.6 KiB
ObjectPascal
{ Test for resource enumeration functions. }
|
|
|
|
{%TARGET=win32,win64,wince,linux,freebsd,darwin,netbsd,openbsd,solaris,haiku,aix,android}
|
|
|
|
{$mode objfpc}
|
|
|
|
uses
|
|
sysutils;
|
|
|
|
{$R tresb.res}
|
|
|
|
procedure Fail(const Msg: string);
|
|
begin
|
|
writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
|
|
type
|
|
TResInfo = record
|
|
name : pchar;
|
|
_type : pchar;
|
|
langid : word;
|
|
found : boolean;
|
|
end;
|
|
|
|
const
|
|
rescount = 3;
|
|
|
|
var
|
|
reslst : array[1..rescount] of TResInfo =
|
|
(
|
|
(name : 'TESTFILE'; _type : 'FILE'; langid : $0409; found : false),
|
|
(name : 'TEST'; _type : 'TEXT'; langid : $0409; found : false),
|
|
(name : 'TESTFILE'; _type : 'FILE'; langid : $0410; found : false)
|
|
);
|
|
|
|
function CompareDesc(d1, d2 : PChar) : boolean;
|
|
begin
|
|
if Is_IntResource(d1) or Is_IntResource(d2) then
|
|
Result:=PtrUInt(d1)=PtrUInt(d2)
|
|
else
|
|
Result:=StrComp(d1, d2) = 0;
|
|
end;
|
|
|
|
procedure ResFound(ResourceType, ResourceName : PChar; IDLanguage : word);
|
|
var i : integer;
|
|
begin
|
|
for i:=1 to rescount do
|
|
begin
|
|
if CompareDesc(reslst[i].name,ResourceName) and
|
|
CompareDesc(reslst[i]._type,ResourceType) and
|
|
(reslst[i].langid=IDLanguage) then
|
|
if reslst[i].found then
|
|
Fail('Resource found twice!')
|
|
else
|
|
begin
|
|
reslst[i].found:=true;
|
|
exit;
|
|
end;
|
|
end;
|
|
Fail('Resource not found!');
|
|
end;
|
|
|
|
function ResLangProc(ModuleHandle : TFPResourceHMODULE; ResourceType, ResourceName : PChar; IDLanguage : word; lParam : PtrInt) : LongBool; stdcall;
|
|
begin
|
|
writeln(' Lang: ',IntToHex(IDLanguage,4));
|
|
Result:=true;
|
|
ResFound(ResourceType,ResourceName,IDLanguage);
|
|
end;
|
|
|
|
function ResNameProc(ModuleHandle : TFPResourceHMODULE; ResourceType, ResourceName : PChar; lParam : PtrInt) : LongBool; stdcall;
|
|
begin
|
|
if Is_IntResource(ResourceName) then
|
|
writeln(' Name: ',PtrUint(ResourceName))
|
|
else
|
|
writeln(' Name: ',ResourceName);
|
|
EnumResourceLanguages(ModuleHandle,ResourceType,ResourceName,@ResLangProc,lParam);
|
|
Result:=true;
|
|
end;
|
|
|
|
function ResTypeProc(ModuleHandle : TFPResourceHMODULE; ResourceType : PChar; lParam : PtrInt) : LongBool; stdcall;
|
|
begin
|
|
if Is_IntResource(ResourceType) then
|
|
writeln('Type: ',PtrUint(ResourceType))
|
|
else
|
|
writeln('Type: ',ResourceType);
|
|
EnumResourceNames(ModuleHandle,ResourceType,@ResNameProc,lParam);
|
|
Result:=true;
|
|
end;
|
|
|
|
procedure CheckFound;
|
|
var i : integer;
|
|
begin
|
|
for i:=1 to rescount do
|
|
begin
|
|
if not reslst[i].found then
|
|
Fail('Resource #'+IntToStr(i)+' was not found!');
|
|
end;
|
|
end;
|
|
|
|
procedure DoTest;
|
|
begin
|
|
EnumResourceTypes(HINSTANCE,@ResTypeProc,0);
|
|
end;
|
|
|
|
begin
|
|
writeln('Resources test.');
|
|
DoTest;
|
|
writeln('Done.');
|
|
end.
|