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

Вниз

видимость переменных   Найти похожие ветки 

 
redlord   (2006-08-29 17:03) [0]

всем привет.
подскажите как зделать чтоб нить запущенная в секции инициализации
DLL  могла передать значения в переменную которая объявлена  в
этой-же DLL ?

если нить запускается (формой) то проблем нет
код нити :

uses unit1.pas; //(форма объявлена тут)
begin
...
form1.переменная:=.......
...
end;

а проект с DLL не авляется pas файлом он dpr  поэтому uses не прокатывает.
P.S. ddl выполняется в чужом А.П.


 
IceBeerg ©   (2006-08-29 17:47) [1]

А метод Synchronize не работает? Как Uses в DPR не прокатывает?
program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Как переменную в DLL объявляеш?


 
Leonid Troyanovsky ©   (2006-08-29 18:08) [2]


> IceBeerg ©   (29.08.06 17:47) [1]

> А метод Synchronize не работает? Как Uses в DPR не прокатывает?


Осмелюсь предположить, что Synchronize в DllMain заказан.
Да, и, собс-но, запуск и остановку потоков в оной - туда ж.

Я бы еще потоптался по TThread в библиотеке, но, нет - ухожу, ухожу.

--
Regards, LVT.

PS. Кстати, вопрошающему могу порекомендовать воспользоваться
его любимым методом IPC, т.к., в первую очередь, это, все же,
разные процессы.


 
redlord   (2006-08-29 18:43) [3]

to icebeerg
а как ее еще можно объявить
--------------------------------------
library hook;
uses
Windows,Messages.........;
var n:integer;
--------------------------------------
а поповоду private и public так их в dll вроде нуту ?


 
Alx_ ©   (2006-08-29 18:49) [4]

Leonid Troyanovsky ©   (29.08.06 18:08) [2]
>Да, и, собс-но, запуск и остановку потоков в оной - туда ж.
Интересно - почему ?


 
Leonid Troyanovsky ©   (2006-08-29 19:06) [5]


> Alx_ ©   (29.08.06 18:49) [4]

> Интересно - почему ?


Запуск или остановка?
А другие тезисы сомнений не вызывают?

Хотя, чтобы не приумножать сущности, лучше ответить:
дабы не приумножать сущности.

Подробности пытливый читатель может найти в msdn, хотя бы:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp

--
Regards, LVT.


 
learner ©   (2006-08-29 22:07) [6]

>[5] Leonid Troyanovsky
Как мне удалось понять, из приведенной ссылки, что в DLLMain не стоит
использовать функции, явно или косвенно подгружающие другие DLL
и устанавливать связь с др. процессами.
А  я в DLL использую NamedPipe и нити (ожидание ответа).
Как мне, тогда, лучше инициализировать все это ?


 
Leonid Troyanovsky ©   (2006-08-29 22:51) [7]


> learner ©   (29.08.06 22:07) [6]

> А  я в DLL использую NamedPipe и нити (ожидание ответа).


Я так думаю, что не следует использовать функции ожидания.
Если, конечно, речь, дейс-но, о DllMain.

--
Regards, LVT.


 
Alx_ ©   (2006-08-30 04:33) [8]

Leonid Troyanovsky ©   (29.08.06 19:06) [5]
Прочитал. Но не сумел понять, почему в DLL-е не стоит
использовать потоки.
>Я бы еще потоптался по TThread в библиотеке, но, нет - ухожу, ухожу.
Давайте "потопчемся"  :))  - очень понять хочется.


 
Сергей М. ©   (2006-08-30 08:53) [9]

Никто не запрещает в DllMain создавать/уничтожать нити, ничего "криминального" в этом нет.
Здесь другой вопрос - нить, будучи созданной в DllMain, не будет стартована вплоть до завершения DllMain.

Иными словами, псевдокод

library MyLib;
..
begin
 hThread := BeginThread(..); //поток как объект ОС успешно создан
 ... //ожидание каких-то действий, осуществляемых только что созданным потоком
end;

лишен смысла и работать не будет.


 
Leonid Troyanovsky ©   (2006-08-30 09:33) [10]


> Сергей М. ©   (30.08.06 08:53) [9]

> Никто не запрещает в DllMain создавать/уничтожать нити,
> ничего "криминального" в этом нет.


Запретов, конечно, нет. Но грабли-то закопаны.

К тому же, поток созданный при Attach, видимо, гасить следует,
видимо, при Detach (а где ж еще?), что, в свою очередь,
сделать без функций ожидания не очень понятно как.

Поэтому, лучше уж осторожненько (msdn):

Note To provide more complex initialization, create an initialization routine for the DLL. You can require applications to call the initialization routine before calling any other routines in the DLL.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-08-30 09:40) [11]


> Alx_ ©   (30.08.06 04:33) [8]

> Прочитал. Но не сумел понять, почему в DLL-е не стоит
> использовать потоки.


Ну, во-первых, надо еще разобраться, стоит ли использовать
саму dll ;)

А, вообще-то, использовать потоки в dll можно (вопрос о стоит
видимо, следует изучать отдельно). Мои напоминания,
в основном, касались использования функций ожидания
в DllMain, т.е., тем, что между begin & end. + DllProc.

--
Regards, LVT.


 
Сергей М. ©   (2006-08-30 09:48) [12]


> Leonid Troyanovsky ©   (30.08.06 09:33) [10]


> гасить следует,
> видимо, при Detach (а где ж еще?), что, в свою очередь,
> сделать без функций ожидания не очень понятно как.


Да, согласен, засада здесь серьезная.


 
Leonid Troyanovsky ©   (2006-08-30 09:54) [13]


> Alx_ ©   (30.08.06 04:33) [8]

> >Я бы еще потоптался по TThread в библиотеке, но, нет -
> ухожу, ухожу.
> Давайте "потопчемся"  :))  - очень понять хочется.


Ну, а что ты ожидаешь от TThread в оной?
Самый полезный Synchronize там не очень-то полезен.
Объектные обертки, в данном случае, лишь запутывают картину.

Скажем, для того чтобы сказать о допустимости Free при
DLL_PROCESS_DETACH надо читать исходники.

Да и, во-ще, объекты в dll - это лишние overheads ;)

--
Regards, LVT.



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

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

Наверх





Память: 0.48 MB
Время: 0.049 c
3-1152568889
the_kola
2006-07-11 02:01
2006.09.17
Пустая БД Access


2-1156999011
Ezorcist
2006-08-31 08:36
2006.09.17
вопрос по сокетам


1-1154366246
Варяг
2006-07-31 21:17
2006.09.17
Форма без границ и заголовка


15-1156521040
saxon
2006-08-25 19:50
2006.09.17
Тест Джоэла


2-1156757046
Rubey
2006-08-28 13:24
2006.09.17
Форма с заставкой





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