|
|
|
Active X COleVariant свойство нестандартного типа
|
|||
|---|---|---|---|
|
#18+
Вот создал класс (производный от COleVariant а соотвественно от VARIANT) class AFunctional : public COleVariant { public: AFunctional(void); virtual ~AFunctional(void); virtual double Foo_F (double x) = 0; virtual double Foo_MaxX () = 0; virtual double Foo_MinX () = 0; virtual double Foo_MaxY () = 0; virtual double Foo_MinY () = 0; }; затем к активному контролу добавляю свойство и устанавливаю в качестве его типа AFunctional * а мне гад-мастер говорит что нельзя т.к. класс не из выпадающего списка, и тоже при добавлении метода нельзя параметр задать не в ввиде списка уже предопределенных типов. как быть как сделать свойство типа Foo если это мой класс или структура или что иное, ну или хотябы как параметр метода это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:55 |
|
||
|
Active X COleVariant свойство нестандартного типа
|
|||
|---|---|---|---|
|
#18+
COM IDL - содержит фиксированный набор типов - его менять нельзя Если надо - то создавайте новый COM-объект - и используйте его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 17:05 |
|
||
|
Active X COleVariant свойство нестандартного типа
|
|||
|---|---|---|---|
|
#18+
нет почему? можно использовать произвольные структуры, описанные по правилам MS IDL, и описание это, ессно, должно там и располагаться. VARIANT - это просто описание одной из структур, с точки зрения компилятора IDL. только, эти структуры никак не отнаследуешь в IDL. другое дело С++... кстати, зачем виртуальный деструктор? зачем вообще виртуальные ф-ции? ты потерял двоичную совместимость с VARIANT. насчет мастеров - они могут немногое, порой приходится и "ручками". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 19:06 |
|
||
|
Active X COleVariant свойство нестандартного типа
|
|||
|---|---|---|---|
|
#18+
страуктуры можно - тут вроде class AFunctional ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 09:08 |
|
||
|
Active X COleVariant свойство нестандартного типа
|
|||
|---|---|---|---|
|
#18+
В общем я переписал это так: class AFunctional : public IUnknown { public: static int GUID; AFunctional(void); virtual ~AFunctional(void); virtual double Foo_F (double x) = 0; virtual double Foo_MaxX () = 0; virtual double Foo_MinX () = 0; virtual double Foo_MaxY () = 0; virtual double Foo_MinY () = 0; }; int AFunctional::GUID = 12345; И в классе контроля сделал метод "SET" void CAGraphCtrl::SetFunctional(VARIANT* fo) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if ( (reinterpret_cast <AFunctional * > (fo))->GUID != 12345 ) AfxMessageBox ( "Переданный параметр не является объектом типа 'AFunctional *' как ожидалось" ); else core.Set_Functional (reinterpret_cast <AFunctional * > (fo)); // TODO: Add your dispatch handler code here } Это заработало, но самому не нравится, может есть еще идеи-способы. кстати а что за "наезды" на виртуальный конструктор и чисто виртуальные методы, ну подумаешь у меня в производном классе будет еще таблица vtable что это изменит с точки зрения передачи через межпроцесное пространство, или как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 17:09 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=468&tid=2035809]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 394ms |

| 0 / 0 |
