我使用Delphi XE,我有以下rc文件:
DB.PREFIX sql_db { "ALPHA\0" }
DB.MAJOR sql_db { 1 }
DB.MINOR sql_db { 1 }我的问题是如何从代码中检查用户定义资源的“原始数据”是整数还是字符串?
发布于 2011-08-04 17:23:39
检查资源的数据类型的问题是,原始数据可以同时解释为整数或字符串,因此必须使用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),相反,您必须创建不同的类型来存储字符串和整数,然后创建一个函数来处理每种类型。
https://stackoverflow.com/questions/6937258
复制相似问题