首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从代码中检查自定义资源的{raw-data}是整型还是字符串?

如何从代码中检查自定义资源的{raw-data}是整型还是字符串?
EN

Stack Overflow用户
提问于 2011-08-04 14:47:38
回答 1查看 278关注 0票数 1

我使用Delphi XE,我有以下rc文件:

代码语言:javascript
复制
DB.PREFIX     sql_db     { "ALPHA\0" }
DB.MAJOR      sql_db     { 1 }
DB.MINOR      sql_db     { 1 }

我的问题是如何从代码中检查用户定义资源的“原始数据”是整数还是字符串?

EN

回答 1

Stack Overflow用户

发布于 2011-08-04 17:23:39

检查资源的数据类型的问题是,原始数据可以同时解释为整数或字符串,因此必须使用LockResource函数,该函数只返回指向资源的指针,而不返回任何附加信息。

检查下一段代码,如果您将RawData的类型从PAnsiChar更改为PInteger,代码也会将数据解释为整数。

代码语言:javascript
复制
{$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),相反,您必须创建不同的类型来存储字符串和整数,然后创建一个函数来处理每种类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6937258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档