|
|
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Привет всем! Есть Сом объект, в нем 2 интерфейса. Проект VS.6, MFC. Делаю импорт. Далее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Получаю указатель на один из интерфейчов. Второй интерфейс содержит методы события? Как мне переопределить методы события от СОМ. Плохо знаю COM, и очень срочно надо сделать. Желательно пример. Заранее благодарю. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 10:36 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Предложили сделать подобным образом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Но когда я создаю объект m_Event = new CIEvents(); Мне компилятор говорит error C2259: 'CIEvents' : cannot instantiate abstract class due to following members: see declaration of 'CIEvents' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 13:19 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Это, скорее всего, потому, что __IInterface является шаблоном. Инстанцируй его при наследовании: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 13:32 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
В том то и дело, что не является. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 14:00 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Значит __IInterface - абстрактный класс. Надо определить все его абстрактные функции. Надеюсь определения этих Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 14:33 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Вроде разобрался. __IInterface производный от IDispatch. Я переопределил HRESULT STDMETHODCALLTYPE GetTypeInfoCount( /* [out] */ UINT __RPC_FAR *pctinfo); HRESULT STDMETHODCALLTYPE GetTypeInfo( /* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); HRESULT STDMETHODCALLTYPE GetIDsOfNames( /* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); HRESULT STDMETHODCALLTYPE Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, /* [out] */ VARIANT __RPC_FAR *pVarResult, /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, /* [out] */ UINT __RPC_FAR *puArgErr); эти методы и все заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 15:23 |
|
||
|
События в СОМ
|
|||
|---|---|---|---|
|
#18+
Если это ActiveX, то попробуй следующее: Menu Project -> Add To Project -> Registred ActiveX Controls -> 'Forex.IInterface'. Возможно его надо сначала зарегистрировать. После этого он по идее должен появиться в Toolbox-е ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 15:27 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33645375&tid=2031597]: |
0ms |
get settings: |
4ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 431ms |

| 0 / 0 |
