Форум: "Начинающим";
Текущий архив: 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