|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Здравствуйте! Уже третий день бьюсь над задачей: необходимо по нажатии одной из трёх кнопок создать поток, который заблокирует кнопки, создаст ole-объект, поработает с ним и уничтожит и объект и себя, разблокировав кнопки. Проблема заключается в том, что, либо ole-объект не хочет по какой-то причине создаваться, либо поток не завершается. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: pascal 1. 2. 3. 4.
Код: pascal 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.
Видимо, я неправильно понимаю принцип работы потоков. Подскажите, пожалуйста, где я накосячил? Вне потока всё работает нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 22:05 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__, как минимум нужно Synchonize либо выкинуть, либо перенести в потоковую процедуру. И изучить это ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 22:18 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Блокировка компонентов не влияет, если её убрать. Ссылку уже изучал. Что я сделал не так? За 3 дня я ничего не нашёл, потому и обратился за помощью. Ссылки-то я и сам поискать могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 22:25 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__ Код: pascal 1.
Что делает Free в методе Execute? Synchronize используется из любви к искусству или непонимания чем поток отличается от объекта TThread? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 22:38 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
_Vasilisk_, и что мне с этим делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 22:43 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Самый главный вопрос - если делать не в потоке - код работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 23:28 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Cobalt747, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 23:29 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
1. Всё операции с VCL (кнопки) только в основном потоке, или через synchronize (что и делается в основном потоке:)) 2. Работа с COM в отдельном потоке должна начинаться с CoInitialize и заканчиваться CoUninitialize 3. Укажите код ошибки, а то это гадание на кофейной гуще ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 13:47 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__, Уберите ключевое слово var в объявлении tm и w. Так вы сделали эти переменные глобальными, а не для экземпляра объекта. И перенесите CoInitialize(nil) до try. И какой смысл в try...except? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 15:28 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
DmSer Уберите ключевое слово var в объявлении tm и w. Так вы сделали эти переменные глобальными, а не для экземпляра объекта. Проверил - не глобальные. К тому же, var добавил, чтобы перекрыть type. DmSer И перенесите CoInitialize(nil) до try. А разве есть разница? Он же в любом случае должен запуститься. DmSer И какой смысл в try...except? Чтобы ошибки отловить и выдать сообщение, иначе как на него попасть? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:02 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Lisichkin, ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:05 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
DmSer Уберите ключевое слово var в объявлении tm и w. Так вы сделали эти переменные глобальными, а не для экземпляра объекта. Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:07 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
_Vasilisk_, ничего не поменялось. Даже локальную переменную для функции Execute сделал без вызова CreateExample - не работает. Иногда вместо просто EOleSysError пишет "ошибка при выполнении приложения-сервера". После этого приложение не реагирует на клики. А если закрыть во время выполнения, то поток остаётся жить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:16 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__ Иногда вместо просто EOleSysError ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:55 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
А нельзя было сразу привести код ошибки в шестнадцатеричном виде :) Пришлось воспользоваться калькулятором :) Ошибка при запуске многих приложений COM+: ошибка 80080005 -- выполнение сервера не удалось Если многие приложения COM+ работают под разными учетными записями пользователей, указанными в свойстве This User, компьютер не может выделить память для создания новой кучи рабочего стола для нового пользователя. Поэтому процесс не может начаться. https://www.google.com/search?q=ole error codes 80080005&ei=H8q0Yd-2JbCrrgS1g724DQ&ved=0ahUKEwifwqOJjtz0AhWwlYsKHbVBD9cQ4dUDCA0&uact=5&oq=ole error codes 80080005&gs_lcp=Cgdnd3Mtd2l6EAM6BwgAEEcQsANKBAhBGABKBQhAEgExSgQIRhgAUIQKWKYTYOEaaAJwAXgAgAFsiAGKBJIBAzQuMpgBAKABAcgBCMABAQ&sclient=gws-wiz ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:01 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Вот так не поможет? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Или даже так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:10 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Lisichkin А нельзя было сразу привести код ошибки в шестнадцатеричном виде :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:11 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
_Vasilisk_, ничего не изменилось, всё та же ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:18 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:04 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__ Ссылку уже изучал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:10 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Соколинский Борис, а что мне даст знание этого? Использование разных не меняет результата в любом случае. Тем более, у меня создаётся только один поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:12 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__, понимание как с ним работать. Сейчас ты это делаешь как будто он MultiThreaded, а это может быть не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:14 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
Соколинский Борис, когда я делал в основном потоке, я даже про coinitialize не знал и без него всё работало. Как оказалось, он обязательно нужен. Но в потоке ни с ним, ни без него не работает всё равно. Даже через специальный интерфейс, как я последний код показал. Не понимаю, что не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:16 |
|
Использование OLE в отдельном потоке
|
|||
---|---|---|---|
#18+
__XeNoNx8000__, если все делать методом тыка, понимание не придет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 20:17 |
|
|
start [/forum/topic.php?fid=58&msg=40119211&tid=2036792]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 135ms |
0 / 0 |