0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 102
1

DLL Библиотека и поток

08.11.2012, 15:09. Показов 1916. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю ДЛЛ библиотеку и в ней есть функции связаные с работой в интернете, и хотелось бы сделать что бы они работали в потоке, как сделать? (сделать надо в библиотеке поток)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2012, 15:09
Ответы с готовыми решениями:

Пытаюсь сделать динамическую загрузку dll. Dll-библиотека не подает признаков жизни
Здравствуйте. У меня такое дело, я пытаюсь создать в своей программе динамическую загрузку...

Поток в DLL
Доброго дня. Можно ли в DLL создавать поток и работать с ним? Создал unit c описанием потока...

DLL библиотека
Помогите реализовать подключение динамической библиотеки к программе unit Unit1; interface...

Dll-библиотека
нужно найти min и max из чисел, которые введены в stringgrid (3x3). dll для нахождения min и...

7
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
08.11.2012, 16:42 2
Примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
TSearchThread = class(TThread)
  private
  public
    NPage: integer;
    StrSearch: string;
    Str: string;
    procedure synchAddDataToControl;
    constructor Create(CreateSuspended: Boolean);
    procedure Execute; override;
    procedure Terminate;
  end;
.....
 
function FindSearch(request: string): string;
var
  http: TIdHTTP;
  StrSrc: string;
begin
  Result:= '';
  http := TIdHTTP.Create(Form1);
  try
    StrSrc := IdHTTP.Get(request);
  except
    form1.Memo2.Lines.Add('ошибка');
  end;
  http.Free;
  result:=StrSrc;
end;
 
constructor TSearchThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := true;
end;
 
procedure TSearchThread.Terminate;
begin
  inherited;
end;
 
procedure TSearchThread.Execute;
begin
    Str := FindSearch(SSearch);
    Synchronize(synchAddDataToControl);
end;
 
procedure TSearchThread.synchAddDataToControl;
begin
  form1.Memo1.Text:=Str;
end;
0
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 102
08.11.2012, 17:00  [ТС] 3
Вот в этом то и проблема, все процедуры и функции размещены в библиотеке ДЛЛ, и поток надо организовать внутри библиотеки, процедура не подойдет раз нужно выводить информацию не обезательно в мемо, поэтому не обойтись без функции.

типа такого храниться в библиотеке
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function file_url(cfg:string):string; stdcall; export;
var s:string; http:TIdHTTP; o, d:integer;
begin
try
http:=TIdHTTP.Create(Application);
s:=http.Get('http://elektro-tob.ucoz.ru/file_config.inc');
o:=Pos(cfg+'::', s);
d:=Posex(';', s, o);
s:=Copy(s, o, d-o);
Result:=s;
finally
  http.Free;
end;
end;
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
08.11.2012, 17:15 4
Цитата Сообщение от cargo29 Посмотреть сообщение
(сделать надо в библиотеке поток)
Не нужно его там делать абсолютно.

Достаточно вынести в dll функцию file_url, предварительно доработав ее с учетом требований и соглашений по общему менеджеру памяти.

Поток при этом следует создавать и стартовать прямо в хост-приложении. Загрузку же dll и получение адреса экп.функции file_url для последующего ее вызова в теле Execute можно выполнить как до создания и старта потока, так и непосредственно в теле Execute потока до вызова ф-ции

Добавлено через 39 секунд
Цитата Сообщение от cargo29 Посмотреть сообщение
(сделать надо в библиотеке поток)
Не нужно его там делать абсолютно.

Достаточно вынести в dll функцию file_url, предварительно доработав ее с учетом требований и соглашений по общему менеджеру памяти.

Поток при этом следует создавать и стартовать прямо в хост-приложении. Загрузку же dll и получение адреса экп.функции file_url для последующего ее вызова в теле Execute можно выполнить как до создания и старта потока, так и непосредственно в теле Execute потока до вызова ф-ции
0
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 102
08.11.2012, 17:34  [ТС] 5
Хорошо, я тут подумал к библиотеке прикрепить юнит файл и в нем прописать поток, и еще вопрос если создать класс в библиотеке длл и в классе создать функции и процедуры их потом можно ли будет вызывать из библиотеки?
0
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
08.11.2012, 17:47 6
Можно
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
08.11.2012, 18:15 7
Цитата Сообщение от cargo29 Посмотреть сообщение
Хорошо, я тут подумал к библиотеке прикрепить юнит файл и в нем прописать поток
Ему про фому, а он опять про ерему)
0
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 102
08.11.2012, 22:51  [ТС] 8
Спасибо буду пробовать осуществить
0
08.11.2012, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2012, 22:51
Помогаю со студенческими работами здесь

DLL библиотека
Создал DLL библиотеку library Project1; uses SysUtils, Classes, Inifiles; var...

Библиотека DLL
Извините за глупий вопрос... но когда я создал библиотеку Dll у меня в папке где dll появились ещо...

Библиотека dll
Задача звучит так : "Разработать приложение, демонстрирующее вызов из библиотеки dll подпрограмм...

Dll-библиотека
Пишу длл,процедуры табулирования в модуле все работает ,а в библеотеке выдает ошибки ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru