Страница: 1 |
Вопрос: тип Variant | Добавлено: 14.09.07 12:40 |
Автор вопроса: ![]() |
люди, подскажите, пожалуйста, можно ли в VB.net, заюзать переименую типа Variant, та ту самую, которая была в 6-ке! Object не подходит!! Собственно проблема в следующем, есть некий Class, у него есть дочерние элементы, доступ к которым осуществляется по индексу! индекс должен иметь значение типа Variant!! какие есть соображения |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 15.09.07 02:16 |
Наверное стоит пересмотреть организацию классов, т.к. доступ к дочерним по индекску, что-то непонятное... имхо. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #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; ![]() VARIANT_BOOL boolVal; _VARIANT_BOOL bool; SCODE scode; CY cyVal; ![]() BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *parray; BYTE *pbVal; SHORT *piVal; LONG *plVal; LONGLONG *pllVal; FLOAT *pfltVal; ![]() VARIANT_BOOL *pboolVal; _VARIANT_BOOL *pbool; SCODE *pscode; CY *pcyVal; ![]() BSTR *pbstrVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY **pparray; VARIANT *pvarVal; PVOID byref; CHAR cVal; USHORT uiVal; ULONG ulVal; ULONGLONG ullVal; INT intVal; UINT uintVal; ![]() 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; ![]() } __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. ![]() VARIANT_BOOL boolVal; // VT_BOOL. _VARIANT_BOOL bool; SCODE scode; // VT_ERROR. CY cyVal; // VT_CY. ![]() 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. ![]() VARIANT_BOOL * pboolVal; // VT_BYREF|VT_BOOL. _VARIANT_BOOL * pbool; SCODE * pscode; // VT_BYREF|VT_ERROR. CY * pcyVal; // VT_BYREF|VT_CY. ![]() 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. ![]() 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; ![]() } __VARIANT_NAME_1; }; }; |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 482 |
Профиль | Цитата | #4 | Добавлено: 15.09.07 22:46 |
To SHARP Я прекрасно знаю, что такое Variant., но вот чтоб Variant использовали как индекс...
ты вопрос то читал? понял что нибудь? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 16.09.07 01:45 |
Ничего не знаю про дотнет, но в C++ в качестве индекса у оператора-члена [] можно использовать хоть красно-черное дерево. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 318170731 Вопросов: 15 Ответов: 96 |
Профиль | Цитата | #6 | Добавлено: 17.09.07 10:29 |
Класс переписать не получиться, так как это dll, стороннего разработчика! почему Variant, не знаю! есть возможность доступа к дочерним элементам по индексу или ключу!! почему разработчик не использовал перегрузку, никому не известно!! WA.Enum(Index), WA - родительский класс, Enum - дочерние элементы, Index - Index (числовой индекс или ключ типа string) |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 318170731 Вопросов: 15 Ответов: 96 |
Профиль | Цитата | #7 | Добавлено: 17.09.07 10:31 |
еще добавлю, этот класс писался для работы под управление VBS, поэтому и Variant, наверное |
Страница: 1 |
|