Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Несколько классов наследуются от IUnknown: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Эти интерфейсы я реализую в классе CA (см. код ниже). Интерфейс IUnknown определяет три функции: QueryInterface, AddRef и Release. Мне нужно, чтобы реализация функции QueryInterface была общей для всех трёх интерфейсов (это успешно работает), а вот функции AddRef и Release должны быть определены индивидуально для каждого интерфейса (с этим как раз таки проблема). Т.е. если переменная объявлена как IX, то для неё должны использоваться AddRef и Release именно те, которые я хочу определить для IX. Та же история по отношению и к IY, IZ. Это позволит мне вести подсчёт ссылок на компонент для каждого интерфейса (для удобства в отладке). Но синтаксис, который я записал - неверный (см. TODO в комментариях). Как это сделать правильно? Текущий вариант кода класса CA такой: Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:14 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Compositum Интерфейс IUnknown определяет три функции: QueryInterface, AddRef и Release. Мне нужно, чтобы реализация функции QueryInterface была общей для всех трёх интерфейсов (это успешно работает), а вот функции AddRef и Release должны быть определены индивидуально для каждого интерфейса (с этим как раз таки проблема). Тут мудрить особо не нужно, используй делегирование. Паттерн Proxy кажись. Т.е. грубо говоря, определи отдельно реализацию, сделай там весь функционал, и вызывай где нужно её, а где не нужно -- не вызывай. Но вообще достатоно станно, если у тебя есть отдельный AddRef/Release, то это -- отдельный объект, потому как это -- аналоги выделения и освобождения памяти, аналоги создания и удаления объектов. И если у двух разных объектов один QueryInterface -- это как-то странно. В любом случае, лучше это делать структурно, а не использовать фичи C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:22 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Compositum, Ещё раз: авторИнтерфейс IUnknown определяет три функции: QueryInterface, AddRef и Release. Мне нужно, чтобы реализация функции QueryInterface была общей для всех трёх интерфейсов (это успешно работает), а вот функции AddRef и Release должны быть определены индивидуально для каждого интерфейса (с этим как раз таки проблема). И код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Это очень странно, поскольку ты хочешь (видимо) создавать и удалять части одного объекта независимо . Как у тебя при этом сам объект будет функционировать, если у него нет одной части ? Не очень понятно. Впрочем, это только замечания, решать тебе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:26 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Я не понял ответа. Специалисты по COM советуют вести отдельный счётчик ссылок для каждого интерфейса, дабы проще было искать ошибки в коде. Декрементирование/инкрементирование ссылок в COM осуществляется посредством AddRef/Release. В книжке пример ведения общего счётчика. Я пытаюсь понять, как реализовать работу со счётчиком отдельно под каждый интерфейс. Буду признателен за пример кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:26 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто очень странно, поскольку ты хочешь (видимо) создавать и удалять части одного объекта независимо . Как у тебя при этом сам объект будет функционировать, если у него нет одной части ? Не очень понятно. Впрочем, это только замечания, решать тебе. Я не собираюсь удалять части одного и того же объекта. Доступ к компоненту в COM может быть представлен одновременно произвольным количеством ссылок через различные интерфейсы. Необходимо отслеживать количество "живых" ссылок, дабы понимать, когда компонент должен быть удалён (компонент сам себя удаляет в этом случае). Это несложно сделать для общего счётчика, но рекомендуется делать отдельный счётчик для каждого интерфейса. Вот это я и пытаюсь реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:29 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Compositum, Ну я всё, что мог, сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 13:33 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
CompositumКак это сделать правильно? Правильно - никак. Как обычно - http://stackoverflow.com/questions/2004820/inherit-interfaces-which-share-a-method-name Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2015, 14:17 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Оформление класса в виде COM объекта http://club.shelek.ru/viewart.php?id=48 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2015, 06:09 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Владимир2012Оформление класса в виде COM объекта http://club.shelek.ru/viewart.php?id=48 Спасибо, конечно за ссылку, но я не спрашивал о том, как классы оформлять в виде COM. :) По ссылке: материал, на мой взгляд, изложен сумбурно и не понятно. Я изучаю COM по книге Дейла Роджерсона "Основы COM". В ней материал изложен последовательно и неплохо "разжёван". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2015, 10:44 |
|
||
|
Индивидуальное определение одноимённой функции под каждый интерфейс
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, устраивающий меня ответ получен здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2015, 10:45 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2018987]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 421ms |

| 0 / 0 |
