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

Вниз

проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
15-1225338523
TUser
2008-10-30 06:48
2008.12.28
Шлюз между Рунетом и остальной Сетью


1-1204991269
Kley
2008-03-08 18:47
2008.12.28
Запуск программы по расписанию


1-1205240760
Matveih1
2008-03-11 16:06
2008.12.28
Как работать с BPL времени выполнения


15-1225297567
AlexDan
2008-10-29 19:26
2008.12.28
Округление к боьшему..


4-1202738807
Unicode
2008-02-11 17:06
2008.12.28
TLogFontW и DrawTextW





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский