Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: тип Variant Добавлено: 14.09.07 12:40  

Автор вопроса:  fluke | ICQ: 318170731 
люди, подскажите, пожалуйста, можно ли в VB.net, заюзать переименую типа Variant, та ту самую, которая была в 6-ке! Object не подходит!! Собственно проблема в следующем, есть некий Class, у него есть дочерние элементы, доступ к которым осуществляется по индексу! индекс должен иметь значение типа Variant!! какие есть соображения

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 15.09.07 02:16
Наверное стоит пересмотреть организацию классов, т.к. доступ к дочерним по индекску, что-то непонятное... имхо.

Ответить

Номер ответа: 2
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #2 Добавлено: 15.09.07 03:07
ну да... интересный индекс типа вариант :)
и что это за индексы?

<telepatmode>

ну допустим есть у тебя твой класс
назовём его UnknownClass, который содержит UnknownProperty и UnknownSub


Public Class UnknownClass
...
...
Public Property UnknownProperty as...
get
...
set
...
end property

Public Sub UnknownSub()
...
end sub

End Class

Ну в твоей проге бери и создавай экземпляр класса и работай с ним типа

Dim myDerivedclass as new UnknownClass
myDerivedclass.UnknownProperty = ....
myDerivedclass.UnknownSub()

</telepatmode>
Ну если не то, так растолкуй лучше... тогда тебе разъяснят лучше

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 15.09.07 21:39
Variant — банальная структура, подробно описанная в MSDN, раздел COM.

typedef struct tagVARIANT VARIANT;

typedef struct tagVARIANT VARIANTARG;

struct tagVARIANT {
    union {
        struct __tagVARIANT {
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union {
                LONGLONG llVal;
                LONG lVal;
                BYTE bVal;
                SHORT iVal;
                FLOAT fltVal;
                ;DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                _VARIANT_BOOL bool;
                SCODE scode;
                CY cyVal;
                ;DATE date;
                BSTR bstrVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                LONGLONG *pllVal;
                FLOAT *pfltVal;
                ;DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                _VARIANT_BOOL *pbool;
                SCODE *pscode;
                CY *pcyVal;
                ;DATE *pdate;
                BSTR *pbstrVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                VARIANT *pvarVal;
                PVOID byref;
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                ULONGLONG ullVal;
                INT intVal;
                UINT uintVal;
                ;DECIMAL *pdecVal;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                ULONGLONG *pullVal;
                INT *pintVal;
                UINT *puintVal;
                struct __tagBRECORD {
                    PVOID pvRecord;
                    IRecordInfo *pRecInfo;
                } __VARIANT_NAME_4;
                }    __VARIANT_NAME_3;

            }    __VARIANT_NAME_2;

        ;DECIMAL decVal;

        }    __VARIANT_NAME_1;

struct tagVARIANT {
    union {
       struct __tagVARIANT {
          VARTYPE vt;
          WORD wReserved1;
          WORD wReserved2;
          WORD wReserved3;
   union {
      LONGLONG                llval;             // VT_I8.
      LONG                    lVal;              // VT_I4.
      BYTE                    bVal;              // VT_UI1.
      SHORT                   iVal;              // VT_I2.
      FLOAT                   fltVal;            // VT_R4.
      ;DOUBLE                  dblVal;            // VT_R8.
      VARIANT_BOOL            boolVal;           // VT_BOOL.
      _VARIANT_BOOL           bool;
      SCODE                   scode;             // VT_ERROR.
      CY                      cyVal;             // VT_CY.
      ;DATE                    date;              // VT_DATE.
      BSTR                    bstrVal;           // VT_BSTR.
      IUnknown                * punkVal;         // VT_UNKNOWN.
      IDispatch               * pdispVal;        // VT_DISPATCH.
      SAFEARRAY               * parray;          // VT_ARRAY|*.
      BYTE                    * pbVal;           // VT_BYREF|VT_UI1.
      SHORT                   * piVal;           // VT_BYREF|VT_I2.
      LONG                    * plVal;           // VT_BYREF|VT_I4.
      LONGLONG                * pllVal;          // VT_BYREF|VT_I8.
      FLOAT                   * pfltVal;         // VT_BYREF|VT_R4.
      ;DOUBLE                  * pdblVal;         // VT_BYREF|VT_R8.
      VARIANT_BOOL            * pboolVal;        // VT_BYREF|VT_BOOL.
      _VARIANT_BOOL           * pbool;
      SCODE                   * pscode;          // VT_BYREF|VT_ERROR.
      CY                      * pcyVal;          // VT_BYREF|VT_CY.
      ;DATE                    * pdate;           // VT_BYREF|VT_DATE.
      BSTR                    * pbstrVal;        // VT_BYREF|VT_BSTR.
      IUnknown                ** ppunkVal;       // VT_BYREF|VT_UNKNOWN.
      IDispatch               ** ppdispVal;      // VT_BYREF|VT_DISPATCH.
      SAFEARRAY               ** pparray;        // VT_ARRAY|*.
      VARIANT                 * pvarVal;         // VT_BYREF|VT_VARIANT.
      PVOID                   * byref;           // Generic ByRef.
      CHAR                    cVal;              // VT_I1.
      USHORT                  uiVal;             // VT_UI2.
      ULONG                   ulVal;             // VT_UI4.
      ULONGLONG               ullVal;            // VT_UI8.
      INT                     intVal;            // VT_INT.
      UINT                    uintVal;           // VT_UINT.
      ;DECIMAL                 * pdecVal          // VT_BYREF|VT_DECIMAL.
      CHAR                    * pcVal;           // VT_BYREF|VT_I1.
      USHORT                  * puiVal;          // VT_BYREF|VT_UI2.
      ULONG                   * pulVal;          // VT_BYREF|VT_UI4.
      ULONGLONG               * pullVal;         // VT_BYREF|VT_UI8.
      INT                     * pintVal;         // VT_BYREF|VT_INT.
      UINT                    * puintVal;        // VT_BYREF|VT_UINT.
      struct __tagBRECORD {
      PVOID                   pvRecord;
      IRecordInfo             *pRecInfo;
      } __VARIANT_NAME_4;
   } __VARIANT_NAME_3;
  } __VARIANT_NAME_2;
  ;DECIMAL decVal;
} __VARIANT_NAME_1;
   };

};

Ответить

Номер ответа: 4
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #4 Добавлено: 15.09.07 22:46
To SHARP Я прекрасно знаю, что такое Variant., но вот чтоб Variant использовали как индекс...
ты вопрос то читал? понял что нибудь?

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 16.09.07 01:45
Ничего не знаю про дотнет, но в C++ в качестве индекса у оператора-члена [] можно использовать хоть красно-черное дерево.

Ответить

Номер ответа: 6
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #6 Добавлено: 17.09.07 10:29
Класс переписать не получиться, так как это dll, стороннего разработчика! почему Variant, не знаю! есть возможность доступа к дочерним элементам по индексу или ключу!! почему разработчик не использовал перегрузку, никому не известно!! WA.Enum(Index), WA - родительский класс, Enum - дочерние элементы, Index - Index (числовой индекс или ключ типа string)

Ответить

Номер ответа: 7
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #7 Добавлено: 17.09.07 10:31
еще добавлю, этот класс писался для работы под управление VBS, поэтому и Variant, наверное

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам