|
|
|
Маршалинг при позднем связываниии
|
|||
|---|---|---|---|
|
#18+
Работаю в BCB6. Есть простая проблема по сути. Программа в потоке выводит в Excel информацию. Нужно организовать возможность отмены построения отчета по команде пользователя. Естественно необходимо закрыть Excel или показать его пользователю. Проблема в том, что как известно нельзя обратиться из к COM объекту из другого потока. Для работы с этим COM объектом необходимо из потока создавшего Excel замаршалить этот объект, а потом в другом потоке демаршалить и создать прокси, и дальше работать через этот прокси. Так вот во всей литературе я встречал примеры только когда работа ведется через раннее связывание, когда у меня есть и указатель на интерфейс, и ID интерфейса. У меня же общение с COM просходит через позднее связывание (мне так очень удобно) соответсвенно ничего вышеприведенного у меня нет. Ну да ладно, решил попробовать вот так создать в потоке Excel Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Потом пытаюсь демаршалить в главной программе по команде пользователя "Остановить процесс" Код: 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. Так вот при установке свойства Excel происходит ошибка: "Не могу преобразовать тип ... в Dispatch". вот. Так что, если кто что-нибудь имеет сказать, буду очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 12:31 |
|
||
|
Маршалинг при позднем связываниии
|
|||
|---|---|---|---|
|
#18+
marshall Есть простая проблема по сути. Программа в потоке выводит в Excel информацию. Нужно организовать возможность отмены построения отчета по команде пользователя. Естественно необходимо закрыть Excel или показать его пользователю.Это делается намного проще. В потоке работающем с внешней программой (в данном случае Excel) между обращениями к внешней программе делается проверка "запросил юзер отмену или нет" (для VCL это Terminate()/if(Terminated) ). Если запросил - то поток начинает заниматься корректным шатдауном внешнего приложения. Развлекаться с маршалингом конечно можно, но опасно - оно все же не предусматривает работу с такими тяжелыми и глюкавыми приложениями как Эксель. Получит GPF на этой дороге как дважды-два. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2006, 18:49 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=350&tid=2031082]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 359ms |

| 0 / 0 |
