如何解决Delphi 2007变体类型初始化
| 我试图声明一个常量数组,以验证输入对象持有的类型属性。但我做错了什么,请看下面的代码:// Record to hold Name-Value pair for checking entities
TValues = record
Name : WideString;
Value : Variant;
end;
const
coarrType1Properties : array[0..5] of TValues =
(
(Name : \'HARDWARE\'; Value : TRUE),(Name : \'SOFTWARE\'; Value : TRUE),(Name : \'TAG\'; Value : TRUE),(Name : \'AUTHORIZED\'; Value : TRUE),(Name : \'ID\'; Value : 700),(Name : \'CODE\'; Value : 0)
);
但我收到类型值的delphi编译时错误,即该类型无法初始化。如何防止这个错误?或者我们可以有其他解决方案等。请协助...
解决方法
对于这些(布尔,整数)和其他简单类型,可以使用
TVarData
进行初始化并将其类型转换回Variant
:
type
TValues = record
Name: WideString;
Value: TVarData;
end;
const
coarrType1Properties : array[0..5] of TValues = (
(Name: \'HARDWARE\'; Value: (VType: varBoolean; VBoolean: True)),(Name: \'SOFTWARE\'; Value: (VType: varBoolean; VBoolean: True)),(Name: \'TAG\'; Value: (VType: varBoolean; VBoolean: True)),(Name: \'AUTHORIZED\'; Value: (VType: varBoolean; VBoolean: True)),(Name: \'ID\'; Value: (VType: varInteger; VInteger: 700)),(Name: \'CODE\'; Value: (VType: varInteger; VInteger: 0))
);
procedure Test;
var
I: Integer;
begin
for I := Low(coarrType1Properties) to High(coarrType1Properties) do
Writeln(Format(\'coarrType1Properties[%d]: \'\'%s\'\',%s\',[I,coarrType1Properties[I].Name,VarToStr(Variant(coarrType1Properties[I].Value))]));
end;
, 该文档指出:
文件类型(包括Text类型)和Variant类型无法初始化,即,您不能声明这些类型的类型化常量或初始化变量。
因此,您的问题出在您的变体记录成员上。这意味着您需要一种不同的方法,并且您将不得不放弃使用常量数组。
function Values(const Name: WideString; const Value: Variant): TValues;
begin
Result.Name := Name;
Result.Value := Value;
end;
type
TValuesArray = array of TValues;
function ValuesArray(const Values: array of TValues): TValuesArray;
var
i: Integer;
begin
SetLength(Result,Length(Values));
for i := 0 to high(Result) do
Result[i] := Values[i];
end;
var
coarrType1Properties: TValuesArray;
initialization
coarrType1Properties := ValuesArray([
Values(\'HARDWARE\',TRUE),Values(\'SOFTWARE\',Values(\'TAG\',Values(\'AUTHORIZED\',Values(\'ID\',700),Values(\'CODE\',0)
]);
, E2071:变体不能用常量表达式初始化。
, 表格D2007帮助:
E2071:无法初始化此类型
文件类型(包括Text类型)和Variant类型无法初始化,即,您不能声明这些类型的类型化常量或初始化变量。
program Produce;
var
V: Variant = 0;
begin
end.
//该示例尝试声明类型为Variant的初始化变量,该变量是非法的。
program Solve;
var
V: Variant;
begin
V := 0;
end.
解决方案是使用赋值语句初始化普通变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。