|
|
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014HOME_X, По уму надо использовать COM интерфейсы. Их надо регистрировать в OS - системный реестр закрыт от изменений а использовать просто DLL возможно почти вседа Тогда выясняйте может ли VBA вызывать интерфейсы без IDispatch. С# может делать такое, наверное VB.Net может. Может VBA сделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:21 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014, Напиши интерфейс на делфи от TInterfacedObject и передай указатель при вызове DLL из VBA и попробуй вызвать функцию из интерфейса. Если получится, можно облегчить себе работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovziv-2014В VBA на прямую можно вызывать функции из DLL без COM сервера. И получать из них RecordSet? Может, конечно, но зачем в этой картине Delphi? переменная типа OleVariant отправляемая по ссылке решает вопрос далее dim D as adodb.recordset set D = "переменная типа OleVariant отправляемая по ссылке" Могу прислать рабочий код vba ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:26 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014ziv-2014, Напиши интерфейс на делфи от TInterfacedObject и передай указатель при вызове DLL из VBA и попробуй вызвать функцию из интерфейса. Если получится, можно облегчить себе работу. VBA через прямую публикацию и OLEVariant работает VBS через COM работает Delphi напрямую через компил. класс без потока работает Delphi напрямую через компил. класс с потоком работает Delphi c включением DLL без потока работает Delphi c включением DLL с потоком ТЕСТИРУЮ... Отошли от темы первичного сообщения о DLL->Thread->@ извращениях Мне не нравятся передача фиксация и передача адреса, и удаление родителя класса через дочь класса Вот это была суть вопроса - чем можно заменить Приложите Ваш код если не сложно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:32 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Может быть Вы праву - ТЕСТИРУЮ ... Сбросьте пожалуйста пример такой функции - на чем основывается, на таймере ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Уважаемые господа Dimitry Sibiryakov, ziv-2014, ёёёёё Спасибо за диалог и доброй ночи !!!!! P.S. - пишите Ваши соображения в коде - так намного понятнее и эффективнее общаться.До утра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 09:49 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? В коде VBA? Можно передавать через таймер результаты. Но тогда надо знать адрес функции в VBA, которой передавать результаты? Тоже как вариант решения проблемы. Есть же по-моему такая функция в VBA AddressOf, которая возвращает адрес функции. https://docs.microsoft.com/ru-ru/dotnet/visual-basic/language-reference/operators/addressof-operator Фактически можно реализовать типа колбеков. Надо эту тему поисследовать. Я вас просил узнать, можно ли в VBA передавать указатели на интерфейсы через функции в DLL и вызывать методы интерфейса в VBA? Я не пробовал. Лучше все же реализовать COM сервер и проще и надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 10:28 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_Xпропущено... Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? Пусть будет Ваша функция применительно к Delphi т.е. DLL->Thread->Delphi P.S. Не работает Synchronize... полное отсутствие реакции если простой вызов процедуры все в норме procedure MyPause begin ShowMessage('Pause'); end; procedure Execute ................ MyPause -- норма Synchronize(MyPause) -- полное игнорирование ............. end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:06 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014пропущено... Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? Пусть будет Ваша функция применительно к Delphi т.е. DLL->Thread->Delphi P.S. Не работает Synchronize... полное отсутствие реакции если простой вызов процедуры все в норме procedure MyPause begin ShowMessage('Pause'); end; procedure Execute ................ MyPause -- норма Synchronize(MyPause) -- полное игнорирование ............. end А причем здесь Synchronize -то это в общем-то внутренняя функция синхронизации с основным потоком в VCL. Если вы ее используете в VBA, то ничего работать не будет. 1. Запустили поток. 2. Дождались результатов. 3. Возвратили результаты. Но синхронизацию надо делать через создание невидимового окна TWinControl. Пример реализации есть тут https://github.com/wadman/wthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:43 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014, Для синхронизации необходимо 1. Создать окно FToolWindow := AllocateHWnd(WWindowProc) при создании потока; 2. Послать сообщение через SendMessage/PostMessage(FToolWindow, ...) - это будет синхронизация. 3. В функции WWindowProc делать вызов Callback из VBA. 4. Удалить окно при завершении потока DeallocateHWnd(FToolWindow); Как-то так должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:49 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xпишите Ваши соображения в коде - так намного понятнее и эффективнее общаться. Зачем? У тебя же уже всё работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:59 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014ziv-2014, 3. В функции WWindowProc делать вызов Callback из VBA. Относительно VBA - хочу чуть отложить тему Вот что имею по Delphi->DLL->Thread Можете дать грамотный совет относительно решения - так как применительно к нижеизложенному это даже не СЕКС, а малолетный онанизм Относительно потока и его "счастливого окончания" Исходя из проведенных тестов могу заключить что в случае с DLL событие окончания выполнения работ (после метода Execute) "теряеться где-то там". Обработчик потока OnTerminate его не получает. Текущее "затычка-решение" Внедрение объекта TTimer, включаю после выполнение основной процедуры метода Execute на его событие вешаю - выключение таймера и выполнение списка "close-terminate" со- бытий потока. Эффект и работоспособность восстановлена. Это описание "поле-потока" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это описание "родитель-объекта" Код: 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. 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. Есть второй вариант - если ПРОСТО вызвать ShowMessage(....) функциональность восстановлена в полном объеме Т.е. сделать так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Отсюда вопрос - что происходит с приложение и как, где и с какого места программного кода можно сэммулировать и отправить сообщение системе (Send/Post Message) для устранения системной ошибки. Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2019, 23:56 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovHOME_Xпишите Ваши соображения в коде - так намного понятнее и эффективнее общаться. Зачем? У тебя же уже всё работает. У меня есть стремление не только закрыть дыры - сделать верное решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2019, 23:58 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Обработчик потока OnTerminate его не получает. OnTerminate - работает через synhronize и поэтому это только делфи решение. Использовать надо SendMessage/PostMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 09:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Отсюда вопрос - что происходит с приложение и как, где и с какого места программного кода можно сэммулировать и отправить сообщение системе (Send/Post Message) для устранения системной ошибки. Создавай вместе с потоком дополнительное окно и разрушай его, когда поток будет завершен. И через это окно синхронизируйся при помощи SendMessage/PostMessage. У тебя вызовы из VBA происходят в главном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 09:43 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, в реализации потоков есть заглушка, обработчик WakeMainThread можно установить свой и сигнализировать своему созданому в главном потоке окну что бы оно вызывало CheckSynchronize в принципе и окно с таймером, которое вызывает CheckSynchronize тоже как вариант и всё будет работать стандартно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 11:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)HOME_X, обработчик WakeMainThread Хотел бы опробывать Ваш вариант Имею описание класса Код: 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. DLL -> родитель объект ->поле поток (уточните верно ли понял где именно надо создать класс TDLLThreadSync) После выполнения основного задания в Execute - удаляю этот класс, по логике должна возникнуть синхронизация и отработать событие OnTerminate :=HandleParent.TerminateThread1; Но результат не получен - где ошибся ? где необходимо создать класс TDLLThreadSync - основная форма (НЕ DLL) - DLL -> классе родителе ? - DLL-> класс родителя -Ю Юполе потоке ? Спасибо Код: 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 23:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, авторПосле выполнения основного задания в Execute - удаляю этот класс, по логике должна возникнуть синхронизация и отработать событие OnTerminate :=HandleParent.TerminateThread1;нет, OnTerminate вызывается после выполнения этого метода по идее вот так должно работать Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 00:00 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, я чесно говоря не вижу зачем в вашем случае вообще использовать синхронизацию если она не используется (т.е. вообще с какого ляду вы синхронизируетесь) и просто нужно отрабатывание метода, то переопределяем у потока Код: pascal 1. 2. 3. 4. 5. 6. на что то типа Код: pascal 1. 2. 3. 4. или вообще сразу код Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 08:30 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Код: pascal 1. 2. 3. 4. 5. 6. В целом все получилось с доп. объектом Только вот так ..... Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 23:11 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, TThread Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2019, 17:05 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, IsMultiThreaded = true ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2019, 20:05 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Bred eFeMHOME_X, TThread Код: pascal 1. 2. 3. 4. 5. 6. 7. Не совсем Вас понял - Вы желаете сделать свой объект TThread ? Не используя наследственность от системного TThread ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 22:40 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39872141&tid=2038889]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 406ms |

| 0 / 0 |
