我使用Delphi XE,我有以下rc文件:
DB.PREFIX sql_db { "ALPHA\0" }
DB.MAJOR sql_db { 1 }
DB.MINOR sql_db { 1 }
我的问题是如何检查用户定义资源的“原始数据”是整数还是代码中的字符串?
答案 0 :(得分:2)
检查资源的数据类型的问题是Raw-Data可以在同一时间被解释为整数或字符串,因此您必须使用仅返回指针的LockResource
函数没有任何其他信息的资源。
检查下一个代码,如果将RawData
的类型从PAnsiChar更改为PInteger,代码也会将数据解释为整数。
{$APPTYPE CONSOLE}
{$R Test.RES}
uses
Windows,
SysUtils;
Procedure CheckResource(const ResourceName:string);
var
hResInfo : THandle;
hResData : THandle;
RawData : PAnsiChar; //-> the resource is treated as an string
//RawData: PInteger; //-> the resource is treated as an integer
begin
hResInfo := FindResource(HInstance, PChar(ResourceName), 'sql_db');
if hResInfo <> 0 then
begin
hResData:=LoadResource(HInstance, hResInfo) ;
try
if hResData <> 0 then
begin
RawData:=LockResource(hResData) ;
Writeln(RawData);
end
finally
FreeResource(hResInfo) ;
end;
end;
end;
begin
try
CheckResource('DBPREFIX');
CheckResource('DBMAJOR');
CheckResource('DBMINOR');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
定义自定义类型资源时,您正在创建特定类型,并且是工作处理该资源的一部分。你现在正在做的事情没有多大意义,因为你要为同一个自定义类型(sql_db)分配不同的数据类型,而你必须创建不同的类型来存储字符串和整数,然后创建一个函数来处理每个类型