Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Потоки в ActiveX (OCX)   Найти похожие ветки 

 
MikePetrichenko ©   (2006-11-15 23:38) [0]

Доброго времени суток!
Вот и мое время пришло стать вопрошающим.
Вопрос собственно прост. Имеется ActiveX. Этот ActiveX подгружает DLL (мою), которая подгружает еще одну DLL (производства тертьей фирмы). Моя является переходником, так как иного способа достучаться до исходной DLL нет.
Так вот проблема: в DLL (последней) создается поток и определнным (каким только богу известно) способом ожидается его завершение. Но ActiveX виснет на мертво и вываливается с жуткой ошибкой. Если эту DLL пользовать в VCL то все ОК.
Такая же проблема наблюдается и при создании потоков в самом ActiveX и используется метод Synchronize.
Потоковая модель Apartment (иначе VB сильно колбасит с другой моделью).
Есть у кого идеи по решению проблемы.

P.S. Жутко извиняюсь за много букв.


 
MikePetrichenko ©   (2006-11-16 00:05) [1]

Блин. Пойду убью кого-нибудь и съем.
Второй вопрос. Есть ли шанс заставить VB и VC (6) использовать ActiveX с потоковой модлью Free или Both?


 
MikePetrichenko ©   (2006-11-16 01:19) [2]

Ау! Тут ктонить про ActiveX слышал? :)
Ну хоть в гугль пошлите. Уж стреляться в пору, но не хочет оно работать...


 
sniknik ©   (2006-11-16 01:38) [3]

зачем в гугль? поближе, почитать ошибку, и попробовать понять о чем она...

> при создании потоков в самом ActiveX и используется метод Synchronize.
с чем синхронизируешся? основной поток с выборкой сообщений есть?


 
MikePetrichenko ©   (2006-11-16 01:42) [4]


> поближе, почитать ошибку, и попробовать понять о чем она.
> ..

Ошибка.. AV at address $xxxxx. Абсолютно ни очем не говорит.


> с чем синхронизируешся? основной поток с выборкой сообщений
> есть?

И не одним :)


 
MikePetrichenko ©   (2006-11-16 01:47) [5]


> попробовать понять о чем она...

Да. В догонку. Чтобы ложных представлений не создавать..
И так. Имеется WidCOMM API. Сие API представляет из себя:
1. DLL, которая ставится вместе с WidComm Bluetooth Stack.
2. LIB + Headers для разработки приложений на VC под WidComm. Причем сия DLL (см. п. 1) экпортирует класс. (Ну это же С, как без этого). Для DLL имеется LIB. Которая статически линкуентся в exe. LIB содердит классы - обертки над классом в DLL (что там в DLL только гадать, да и в LIB тоже не понятно).
3. Для ухода от статической линковки (ну нельзя мне чтобы эта DLL статически линковалась) была создана DLL переходник между Delphi (читай VCL) и WidComm API LIB.

Так вот. При загрузке сеей DLL вызывается функция инициализации WidCOMM API. Если я эту фнукцию вызываю из VCL то все ОК. Но как только функция вызывается из ActiveX (OCX), то она виснет намертво. Исследования показали что там заводится поток какой-то. А дальше фиг его знает что происходит.


 
sniknik ©   (2006-11-16 01:51) [6]

> Ошибка.. AV at address $xxxxx. Абсолютно ни очем не говорит.
очень даже говорит. обращение к чему то несозданному, с указанием адреса где... при желании и удаче вплоть до строки покажет (Find Error).

чегото ты не создал... чтото, что в VCL, раз там работает, делается автоматом. например инициализация COM (CoInitialize).


 
MikePetrichenko ©   (2006-11-16 01:54) [7]


> очень даже говорит. обращение к чему то несозданному, с
> указанием адреса где... при желании и удаче вплоть до строки
> покажет (Find Error).
>
> чегото ты не создал... чтото, что в VCL, раз там работает,
>  делается автоматом. например инициализация COM (CoInitialize).
>

Тьфу. Какой в баню строки, если AV вываливается в WidCOM API DLL.
VCL версия, а не ActiveX в VCL.
http://www.btframework.com
Есть две версии ActiveX и VCL.
VCL версия работает отлично, ActiveX вот с такими заворотами.


 
MikePetrichenko ©   (2006-11-16 01:57) [8]

Да. И еще в догонку. Код библиотек ОДИНАКОВ. Т. е. ActiveX - обертка над VCL версией. Инициализация происходит в секции initialization....
Упс. По-моему нашел ошику. Вопрос в какой последовательности эти секции инициализации вызываются.....


 
sniknik ©   (2006-11-16 02:10) [9]

> Инициализация происходит в секции initialization....
> Вопрос в какой последовательности эти секции инициализации вызываются.....
тогда уж и, что в нем инициализируется/создается(поток?), и сколько обращений(копий обьектов) к библиотеке ActiveX ожидается, т.к. инициализация произойдет 1 раз, а копий будет к примеру десять, они все за тот один поток и передерутся, если там есть конечно какаято связь/взаимодействие между ними (а зачем еще Synchronize. явно есть).


 
MikePetrichenko ©   (2006-11-16 02:19) [10]


> (копий обьектов) к библиотеке ActiveX ожидается

Я же написал: потоковая модель Apartment!


 
MikePetrichenko ©   (2006-11-16 02:51) [11]

И так. Перефразирую вопрос.
Имеется:
WidCommAPIDLL (черный ящик, есть только описание либы) -- LIB(C++)+DLL(переходник писанный мною) -- VCL компоненты (писано мною)
При загрузке VCL в секции инициализации выполняется (кратко):
1. Проверка наличия WidCommAPIDLL
2. Если есть, загрузка моей DLL.
3. Если п.2 ОК, получение указателей на нужные мне функции.
4. Все функции ОК, то вызов функции инициализации моей DLL (где инициализируется WidCommDLL).
5. Вызов функции инициализации Bluetooth стека из моей DLL который просто переадресовывается в соответствющую функцию WidCommDLLAPI
6. Вызов функии проверки инициализации стека (аналогично п. 5).

Так вот. При работе в VCL версии сие работает отлично.
Если же компилится ActiveX то виснем на п 6.

По моим наблюдениям п. 6. создает какой-то поток.
Отсюда вопрос про потоки в ActiveX с потоковой моделью Apartment, так как с Free все вроде работает.
Но Free не понимается VB и VC.
Отсюда вопрос про Free в данных средах.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.044 c
2-1163778807
Jzero
2006-11-17 18:53
2006.12.03
Поиск папки


2-1163670719
galyc
2006-11-16 12:51
2006.12.03
правильность ввода пути


4-1153296669
Интересующийся
2006-07-19 12:11
2006.12.03
Два вопроса о региональных стандартах


3-1159414596
Frozzen
2006-09-28 07:36
2006.12.03
Список таблиц Access?


2-1163404646
YOjik
2006-11-13 10:57
2006.12.03
Хочу обрезать начало у файла, ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский