Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

проблема с DirectX (TDXPlay)   Найти похожие ветки 

 
Богдан   (2007-12-04 13:39) [0]

Я использую объект типа TDXPlay для взаимодействия компьютеров по сети. Все чудно работает, когда этот объект создается в модуле формы основной программы: сессия открывается, сервер создается, другие пользователи присоединяются, сообщения принимаются. НО! Все перестает работать, когда этот объект помещаю в DLL. Нет, сессия также инициализируется без проблем, но процедура OnMessage НЕ ВЫЗЫВАЕТСЯ ! Т.е. объект работает, но почему-то не принимает сообщения. Кто-нибудь может помочь? При необходимости вышлю исходники на e-mail


 
umbra ©   (2007-12-04 13:46) [1]


> процедура OnMessage НЕ ВЫЗЫВАЕТСЯ ! Т.е. объект работает,
>  но почему-то не принимает сообщения.


потому что в длл нет окна и никакие сообщения никто не принимает. К сети это отношения не имеет.


> Кто-нибудь может помочь?

помочь может только создание цикла выборки оконных сообщений в длл


 
MetalFan ©   (2007-12-04 14:11) [2]

простите, но разве цикл выборки сообщений относится не к потоку?
при чем тут dll?


 
umbra ©   (2007-12-04 14:25) [3]


> при чем тут dll?

даже если у потока есть цикл выборки сообщений, то как он узнает, что, получив вот_это_конкретное_сообщение, надо отправить его динамически загруженной длл? И как она его получит?


 
Богдан   (2007-12-04 14:59) [4]

Коллеги, я в dll специально включил форму, она корректно отзывается извне dll. Но сообщения DXPLay"ем по-прежнему не принимаются. Может, дело в какой-нибудь глобальной регистрации этого DXPLay"я как приемщика сообщений? И, если все-таки отлавливать сообщения, то какие именно (в смысле, на какие сообщения реагировать)?


 
Rouse_ ©   (2007-12-04 21:36) [5]

ЦВС без окна?


 
Сергей М. ©   (2007-12-05 10:18) [6]


> я в dll специально включил форму


Зачем ?
Только для того чтобы было куда-то "бросить" компонент TDXPlay ?


 
Богдан   (2007-12-06 11:33) [7]

Компонент TDXPlay создается в run-time, на форму ничего не бросал. Просто в FormCreate вызываю DXPLay := TDXPlay.create . Но не помогло. Более того: обнаружил странное явление: форма, созданная в dll, вообще не принимает сообщений!. Обнаружил это так: в FormCreate назначаю процедуру обработки сообщений:
Application.OnMessage := AppMessage;
а в процедуре AppMessage просто пихаю ID полученного сообщения в Memo на форме. Так вот, никаких сообщений форма не принимает! Исключение составляет тот момент, когда форма показывает диалоговое окошко ShowMessage: при показанном на экране диалог боксе Memo исправно заполняется сообщениями (опять же, только от окошка сообщения). В общем, проблема видится мне в том, то форма, созданная в dll, почему-то не принимает сообщений (как-бы не является приложением, что-ли...)  :(


 
Сергей М. ©   (2007-12-06 11:45) [8]


> форма, созданная в dll


Вот я и спрашиваю, зачем она там вообще нужна ?


 
Богдан   (2007-12-06 14:18) [9]

Вообще она там не нужна. Но не работает ни с формой, не без нее. Форму я использовал для того, чтобы проверить механизм сообщений (доходят ли они до dll). Похоже, что не доходят, поэтому и DXPLay не чувствует входящих (DX-овых) сообщений


 
Slym ©   (2007-12-06 14:35) [10]

Суй в поток...
псевдокод:


TПоток.Execute;
begin
В потоке создаеш DXPLay
стандартный цикл выборки сообщений (while GetMesage do DispatchMessage)
убиваеш DXPLay
end;


 
Сергей М. ©   (2007-12-06 14:53) [11]


> Богдан   (06.12.07 14:18) [9]


> Вообще она там не нужна


Ну наконец-то дошли до истины)

Теперь след.вопрос - использует ли твоя библиотека и твое хост-приложение рантайм-пакеты ?


 
Богдан   (2007-12-07 08:47) [12]

Рантайм-пакеты библиотека не используют ни библиотека, на хост-приложение. В опциях проектов (обоих) флажок "Build with runtime packages" отключен - все опции оставлены от установки Delphi (D7) по умолчанию. Попробую сунуть в поток...


 
Сергей М. ©   (2007-12-07 09:00) [13]


> Рантайм-пакеты библиотека не используют


В таком случае модуль библиотеки и модуль хост-приложения используют разные (каждый свой собственный) объекты Application. В этом и кроется "засада".


 
Богдан   (2007-12-07 13:56) [14]

Да, Сергей, я тоже так думаю. Что делать?


 
Сергей М. ©   (2007-12-07 14:11) [15]


> Что делать?


Для начала определиться, будет ли твоя dll эксплуатироваться в т.ч. хост-процессами приложений, сверстанных в иных средах разработки (отличных от Делфи и ВСВ)


 
Богдан   (2007-12-07 14:35) [16]

Да


 
Сергей М. ©   (2007-12-07 14:47) [17]

Тогда тебе прямая дорога к организации всей этой петрушки в доп.потоке.
Или к отказу от TDXPlay, логику работы которого ты изменить не в силах и не вправе


 
Богдан   (2007-12-09 11:00) [18]

А какие могут быть варианты, если только из Delphi или BCB (мою dll использовать)?


 
Сергей М. ©   (2007-12-10 08:27) [19]


> какие могут быть варианты


Альтернативный вариант - блокирующий ввод/вывод


 
Богдан   (2007-12-10 09:59) [20]

В общем, запихнул я этот DXPlay в thread - тот же самый эффект (т.е. сообщения на принимает). Технология такая: DLL создает thread, в модуле thread"а создается DXPlay, назначаются процедуры... все то же самое. Единственное, что работает, так это метод Open - DXPlay инициализируется нормально, подключиться к нему все еще можно, но сообщения он не принимает. Что такое блокирующий ввод/вывод?


 
Сергей М. ©   (2007-12-10 10:10) [21]


> запихнул я этот DXPlay в thread - тот же самый эффект


Значит неправильно "запихнул".


 
Slym ©   (2007-12-10 10:19) [22]

Богдан   (10.12.07 9:59) [20]
назначаются процедуры...

А дальше долженбыть цикл выборки сообщений



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

Текущий архив: 2008.12.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
15-1225305335
sniknik
2008-10-29 21:35
2008.12.28
Как узнать сайты на одном IP адресе?


15-1225052523
koha!
2008-10-26 23:22
2008.12.28
Консоль для супер маленьких


15-1225547562
@!!ex
2008-11-01 16:52
2008.12.28
Помогите разобраться с построением


2-1226946443
demon
2008-11-17 21:27
2008.12.28
Как получить полный путь к файлу из относительного?


15-1225078082
Slider007
2008-10-27 06:28
2008.12.28
С днем рождения ! 25 октября 2008 суббота