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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.049 c
2-1156999011
Ezorcist
2006-08-31 08:36
2006.09.17
вопрос по сокетам


2-1156757712
stud
2006-08-28 13:35
2006.09.17
вопрос по action


2-1156775394
AlexanderMS
2006-08-28 18:29
2006.09.17
Флаги.


15-1156945347
vecna
2006-08-30 17:42
2006.09.17
Mazda vs Focus


2-1156416761
Alexey 12
2006-08-24 14:52
2006.09.17
Чтение последних строк файла