Как получить вариант из указателя в Delphi? - PullRequest
6 голосов
/ 13 апреля 2011

Мне нужно иметь возможность конвертировать голый указатель в вариант. Я знаю, что указатель указывает на вариант, но я не могу вернуть его обратно. Прямое приведение (как я в значительной степени думал) терпит неудачу:

Result := Variant(FAddress)^

возвращает ошибку компилятора: [Ошибка DCC] E2089 Неверный тип ввода

Я также обыскивал блок options.pas, но ничего не выпрыгнуло на меня.

Очевидно, я что-то упустил. Как это сделать?

1 Ответ

16 голосов
/ 13 апреля 2011

Если указатель указывает на вариант, то его тип является PVariant.Приведите его к этому типу, а затем разыменуйте:

Result := PVariant(FAddress)^;

Еще лучше, объявите FAddress с правильным типом для начала, и тогда вам не нужно вводить тип:

var
  FAddress: PVariant;

Result := FAddress^;

Компилятор считает вашу попытку приведения типа недопустимой, поскольку тип Variant больше, чем Pointer.Компилятор не знает, где взять дополнительные данные для создания полного значения Variant.И если приведение типа было допустимым, то использование оператора ^ на Вариантах все равно не допускается.Возможно, вам это сошло с рук:

Result := Variant(FAddress^);

Мне это никогда не нравилось;если FAddress - нетипизированный указатель, то разыменование дает значение без какого-либо размера или типа, и просто странно приводить такие типы.

...