Как сравнить ОлеВарианты?

Vip03
Дата: 16.10.2006 04:42:55
Procedure AddToList(List: TList; Ole: OleVariant);
Var
  I: Integer;
  POLeVariant: ^OleVariant;
  NameList, NameCurrent: String;
Begin
    For I:=List.Count-1 DownTo 0 Do
    Begin
      POleVariant:=List.Items[IndCurrent];
      If VarToStr(POleVariant^)=VarToStr(Ole) Then
        Exit;
      New(POleVariant);
      POleVariant^:=Ole;
      List.Add(POleVariant);
      Exit;
    End;  // For I:=List.Count DownTo 0 Do
End;
ТЛист содержит ОлеВарианты. Если такого ОлеВарианта в ТЛисте нет - добавляем. Ругается на эту строку
If VarToStr(POleVariant^)=VarToStr(Ole) Then
// Could not convert variant of type (Dispatch) into type (String)
Tosh
Дата: 16.10.2006 04:54:42
Это очередной паровозовеломоторакетомобиль или заранее известны типы данных?
Тема уже поднималась не один раз - если у Вас известны типы данных - приводите к этим типам. Если нет - тогда и смысла не вижу (как Вы себе представляете сравнение числа 1 и буквы П, например?)
Vip03
Дата: 16.10.2006 04:59:20
я представляю что 1<>"П" :-)

Тип оле вариант.
К чему его можно привести?
Через оле подцепляюсь к адинэсу, и оле вариант содержит адинэсовский элемент справочника...Вот и нужно узнать - есть этот элемент справочника в ТЛисте, а если нету - его нужно добавить...
Vip03
Дата: 16.10.2006 05:07:36
И еще, если смотреть в отладчике чему равно POleVariant^ - отладчик же показывает $0123456... Как хотя бы эту строку получить??
mikolas
Дата: 16.10.2006 06:24:21
VarAsType может схавает?
Tosh
Дата: 16.10.2006 06:31:25
Мне всееще не понятно что именно вы собрались сравнивать? Откуда вы берете входящие параметры? Есть ли документация на эти варианты (описания тех же интерфейсов)?
Если ничего подобного нет - думаю Вам лучше пытаться сравнить просто поинтеры.
В ошибке написано, что вы пытаетесть ком-интерфейс привести к строке. Так вот и ишите описание этого интерфейса, после чего храните уже именно интерфейсы в своем листе, а не варианты
mikolas
Дата: 16.10.2006 06:39:19
Tosh
Мне всееще не понятно что именно вы собрались сравнивать? Откуда вы берете входящие параметры? Есть ли документация на эти варианты (описания тех же интерфейсов)?
Если ничего подобного нет - думаю Вам лучше пытаться сравнить просто поинтеры.
В ошибке написано, что вы пытаетесть ком-интерфейс привести к строке. Так вот и ишите описание этого интерфейса, после чего храните уже именно интерфейсы в своем листе, а не варианты

Действительно.
POleVariant:=List.Items[IndCurrent]-> далее куча свойств;
Tosh
Дата: 16.10.2006 06:43:01
mikolas
Действительно.
POleVariant:=List.Items[IndCurrent]-> далее куча свойств;

Можно (если я правильно понял автора), хранить GIUD базового интерфейса (либо лубое уникальное для данного экземпляра справочника значение, которое можно получить на основе переданного Dispatch)
mikolas
Дата: 16.10.2006 07:16:23
Tosh
mikolas
Действительно.
POleVariant:=List.Items[IndCurrent]-> далее куча свойств;

Можно (если я правильно понял автора), хранить GIUD базового интерфейса (либо лубое уникальное для данного экземпляра справочника значение, которое можно получить на основе переданного Dispatch)

В смысле у варианта может быть куча свойств, тем более OLE.
Tosh
Дата: 16.10.2006 10:05:56
mikolas
В смысле у варианта может быть куча свойств, тем более OLE.

Я не понимаю что именно вы подразумеваете под это фразой, но в примере переменная модержит указательна интерфейс.
Каковой, судя по всему, является одним из интерфейсов COM сервера 1С.