Страница 1 из 1

Variant массивы[Решено]

СообщениеДобавлено: 11.03.2011 10:18:58
dionic
Народ подскажите кто сталкивался с такой проблемой, пытаюсь создать variant массив в lazarus, одним из элементов которого тоже является variant массив, пишу
Код: Выделить всё
lSend:= VarArrayOf([ VarArrayOf([False, 44]), 'ggg' ]);

, но в место массива получаю исключение :
EVariantTypeCastError
Could not convert variant of type (Array of variant) into type (Array of variant)

Уже разными способами перепробовал. А в delphi работает такой код.

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 11:04:17
Sergei I. Gorelkin
Что тут подскажешь... Исправлять RTL надо...

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 11:16:14
dionic
ааааа!!!!...


В variant массив даже не добавить просто динамический массив как элемент!!!

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 11:21:40
Maxizar
Хм что то сегодня у всех какие то баги... Обновились чтоль все ?? :twisted:
У меня: Lazarus 0.9.29 SVN: 29368 (по свн это наверное декабрь 2010)
Делаю так:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Variants;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var VarArray:Variant;
begin

   VarArray:=VarArrayOf([ VarArrayOf([True, 44]), 'ggg' ]);

   if Boolean(VarArray[0][0]) then
     Caption:=IntToStr(Integer(VarArray[0][1]));

   Caption:=Caption+'  '+String(VarArray[1])
end;

end.

В Caption поучаем надпись: 44 ggg
И никаких предупреждений, и уж тем более вылетов программы. Удачи.

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 11:24:49
dionic
Видно у меня старая версия лазаруса, там это ещё не исправлено, щас попробую поставить новую может там всё нормально с этим...

Lazarus 0.9.28.2
FPC 2.2.4 i386-win32-win32/win64

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 11:29:24
Maxizar
Да скорее всего... я качаю отсюда, лень собирать из SVN :)
Если обновление поможет, измените название темы на: Variant массивы [Решено], это помогает при поиске ответов на проблему подобной вашей.

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 12:12:27
Mr.Smart
Народ это к Lazarus вообще никакого отношения не имеет! Это проблема RTL FPC. Так что обсуждать версии Lazarus не имеет смысла!

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 12:21:34
dionic
Ну вон у Maxizar же всё работает на Lazarus 0.9.29 SVN: 29368, или там другой FPC ставится вместе с ним?

Re: Variant массивы

СообщениеДобавлено: 11.03.2011 12:22:36
Maxizar
Mr.Smart - Вы правы. Но dionic использует Lazarus 0.9.28.2 а тот в свою очередь FPC 2.2.4, Я же Lazarus 0.9.29 который компилит при помощи FPC 2.4.2.. Я не думал, что dionic использует такую старую версию, думал наоборот, типа FPC 2.5.1 и по этому выражение: "Обновились чтоль все ??" - Был в этом ключе мол у меня на "Старом" все работает а тут нет... Но оказалось все немного подругому :twisted:

dionic писал(а):или там другой FPC ставится вместе с ним?

Да другой. читай пост... Некоторый юзают и Lazarus и FPC собирая и тот и другой из SVN. НО это дело вкуса. Я лично качаю дневные сборки
Для своей Win XP, я качаю вот этот: Lazarus-0.9.29-xxxx-fpc-2.4.2-xxxxx-win32.exe