Страница: 1 |
Страница: 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-сайт:
Профиль | | #3
Добавлено: 15.09.07 21:39
Variant — банальная структура, подробно описанная в MSDN, раздел COM.
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;
 OUBLE dblVal;
VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;
CY cyVal;
 ATE date;
BSTR bstrVal;
IUnknown *punkVal;
IDispatch *pdispVal;
SAFEARRAY *parray;
BYTE *pbVal;
SHORT *piVal;
LONG *plVal;
LONGLONG *pllVal;
FLOAT *pfltVal;
 OUBLE *pdblVal;
VARIANT_BOOL *pboolVal;
_VARIANT_BOOL *pbool;
SCODE *pscode;
CY *pcyVal;
 ATE *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;
 ECIMAL *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;
 ECIMAL 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.
 OUBLE dblVal; // VT_R8.
VARIANT_BOOL boolVal; // VT_BOOL.
_VARIANT_BOOL bool;
SCODE scode; // VT_ERROR.
CY cyVal; // VT_CY.
 ATE 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.
 OUBLE * 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.
 ATE * 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.
 ECIMAL * 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;
 ECIMAL 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-сайт:
Профиль | | #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, наверное