Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с DirectX (TDXPlay) [D7, WinXP]


Страницы:   1 2

Богдан ©   (2007-12-04 13:39:00) 

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


Slym   (2007-12-10 10:19:00) [1]

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

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


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


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


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


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

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


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


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


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


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

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


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

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


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

Да


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


> Что делать?


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


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

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


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


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


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


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

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


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


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


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


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

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


Slym   (2007-12-06 14:35:00) [13]

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


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


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

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


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


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


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


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

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


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


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


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


Rouse_   (2007-12-04 21:36:00) [18]

ЦВС без окна?


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

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


umbra   (2007-12-04 14:25:00) [20]


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо