Variant := TObject.Create ?
Семен Хмелев
function VarIsObject(Value: Variant): Boolean;
function ObjectToVariant(const AObject: TObject): Variant;
function VariantToObject(const Value: Variant): TObject;
function ObjectToVariant(const AObject: TObject): Variant;
begin
Result := 'vgobj' + IntToStr(Integer(Pointer(AObject)));
end;
function VariantToObject(const Value: Variant): TObject;
var
S: string;
begin
S := Value;
{$IFDEF FPCCOMP}
if (S <> '') and (Pos(WideString('vgobj'), S) = 1) then
{$ELSE}
if (S <> '') and (Pos('vgobj', S) = 1) then
{$ENDIF}
Result := TObject(Pointer(StrToInt(Copy(S, 6, 10))))
else
Result := nil;
end;
…и расположено это все не в модули System или Variants, а в Types. Никакой поддержки на уровне компилятора нет. Т.е. все еще нельзя писать так
var
v: Variant;
begin
v := TMyClass.Create();
end;Почему бы Embarcadero уже не реализовать нормальную поддержку объектов в variant, ну или хотя бы сделать на основе TCustomVariantType. Непонятно. Притом, что есть и наследники от него TInvokeableVariantType и TPublishableVariantType.
Возможно, все ради совместимости с COM Variant, не хотят далеко от него уходить и пытаются сохранить Variant для типов передающихся по значению. Или, возможно, методы VariantToObject и ObjectToVariant были реализованы Евгением Крюковым KSDev, а в Embarcadero не стали ничего переделывать, работает и на том спасибо.
Чтение в FinalBuilder VersionInfo из проекта Delphi 7
Семен ХмелевПример настройки действия чтения MajorVer значения. |
Но что бы такая схема заработало неодходимо в действие Build Delphi Win32 Project на закладке Project отменить «Load Settings from project File» и «Version Info»:
В этом случае при сборке будет использоваться .dof файл.