| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > CreateJbject в потоке |
| Автор: Гость_sall82 28.12.2005, 09:01 |
| Цель неясна, мысли туманны... Есть функция, вызываемая потоком - threadProc в ней хочу открыть адо, взять данные с SQL сервера, "съесть" их и закончить поток. dim myAdo as object set myAdo = CreateObject("msadodvlib.adodc") Но не тут-то было. На креат обжект поток обижается, и вылетает с ошибкой "Память не может быть read" Где-то внутри понимаю, что нужно использовать АПИ, но не имею ни малейшего представления, как объявить, инициализировать, и общаться с адо в этом случае. Кто-нить понимает, что я хочу сказать? |
| Автор: Akina 28.12.2005, 09:28 | ||
а может, без CreateObject - попробовать как в приложении
|
| Автор: Plamenk 28.12.2005, 10:19 |
| Как ты создаешь потоки? Если с помощью WinApi, то CreateObject точно нельзя использовать. Многопточность в VB можно реализовать с помощью ActiveX EXE. |
| Автор: Гость_sall82 28.12.2005, 10:35 |
| Пробовал, конечно. В простой-то функции эт работает, но вот в теле потока... В нем же большинство принципов VB не заработает. В твоем примере Dim cn as ADODB.Connection - проходит нормально а вот на Set cn = New ADODB.Connection - уже ошибка. В потоке нельзя использовать NEW, надо по-другому ломать. |
| Автор: Гость_sall82 28.12.2005, 10:39 |
| Plamenk Млин, так и знал, что все дело в стандарт exe. Потоки то создаю, кушая CreateThread из Kernel32. Значит, копать надо на ActiveX, по-другому никак? У меня поток просто этот - маллеееееенькая часть всего кода. Причем код этот уже конечный, его просто оптимизирую. Не охота ковырять все заново... |
| Автор: Plamenk 28.12.2005, 11:36 |
| Многопоточность надо реализовывать через ActiveX EXE. Посмотри в MSDN там даже был пример! Добавлено @ 11:40 У меня в MSDN от 2001 выдается статья с названием "Creating a Multithreaded Test Application" |
| Автор: Гость_sall82 29.12.2005, 08:17 |
| Млин. Все делал, не могу победить, и все. Это уже про ActiveX. И в MSDN только простой поток описан - сложить, вычесть, разделить. Я же не расстояние до звезд вычисляю, а пытаюсь довольно продолжительный рекордсет в параллели выполнять. Кто знает, в чем проблема? Суть такая. Есть поток. Создаю его APIшной Creadthread, передаю адрес ThreadProc В этой процедуре объявляю dim MyConnection as clsMyConnection, где clsMyConnection - созданный мной для простоты душевной класс. Внутри класса, все что можно и нельзя, уже объявил public, в нем сидит и стандартный адо, куча его параметров и результатов. Но как только из поточной функции ThreadProc вызываю хотя бы MyConnection.SetRecorsource (свой метод в классе), поток вылетает на этом месте. Меня пока еще бесить не начало, но скоро начнет. Помогите, кто чем может... с ума не сойти. Или вернуться на си. |