Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 - попробовать как в приложении

Код

Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
    .Provider = "..."
    .ConnectionString = "..."
    .Open
End With 

Автор: 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 (свой метод в классе), поток вылетает на этом месте. Меня пока еще бесить не начало, но скоро начнет. Помогите, кто чем может... с ума не сойти.
Или вернуться на си.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)