Последняя версия DataExpress 3 beta от 4 апреля 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

взаимодействие с dll

Все о том как сделать что-то с помощью скриптов.
jurist23rus
Эксперт
Сообщения: 2684
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 18 раз

взаимодействие с dll

Сообщение jurist23rus » Пн сен 03, 2018 7:50 pm

В dll выполняется операция с определенным интервалом. Как посылать сведения о результатах этой операции в основную программу? Сейчас запрашиваю из dx по таймеру, но мне не нравится - при сработке таймера есть небольшие подтармаживания в dx. Есть ли более оптимальный способ получать что-то из dll на регулярной основе, не задействуя таймера?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1586
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 11 раз

Re: взаимодействие с dll

Сообщение Гocть » Пн сен 03, 2018 8:03 pm

Где код dll? А вызывающий?

jurist23rus
Эксперт
Сообщения: 2684
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 18 раз

Re: взаимодействие с dll

Сообщение jurist23rus » Пн сен 03, 2018 8:06 pm

Я планировал обсудить чисто теоретически. Как подобное лучше реализовать.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 4756
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 24 раза
Поблагодарили: 207 раз

Re: взаимодействие с dll

Сообщение admin » Пн сен 03, 2018 8:09 pm

Можно было бы послать какое-нибудь сообщение или использовать протокол TCP, но в DX нет возможностей обработки сигналов извне.

jurist23rus
Эксперт
Сообщения: 2684
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 18 раз

Re: взаимодействие с dll

Сообщение jurist23rus » Пн сен 03, 2018 8:12 pm

Вы не планируете что-то добавить в dx?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 4756
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 24 раза
Поблагодарили: 207 раз

Re: взаимодействие с dll

Сообщение admin » Пн сен 03, 2018 9:46 pm

Планирую, но пока не знаю что, как и когда.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1586
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 11 раз

Re: взаимодействие с dll

Сообщение Гocть » Пн сен 03, 2018 9:58 pm

admin писал(а):Планирую, но пока не знаю что, как и когда.
https://www.youtube.com/watch?v=aziXWO4hV-U
Изображение

jurist23rus
Эксперт
Сообщения: 2684
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 18 раз

Re: взаимодействие с dll

Сообщение jurist23rus » Пн сен 03, 2018 9:58 pm

:)
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1586
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 11 раз

Re: взаимодействие с dll

Сообщение Гocть » Пн сен 03, 2018 10:46 pm

Гocть писал(а):Как посылать сведения о результатах этой операции в основную программу?

Можно через "CmdLine API". DataExpress при этом может быть закрыта. Вместо dll в фоновом режиме (или в качестве службы) работает отдельный exe и по заданному событию/таймеру открывает DataExpress:
C:\Путь к программе\DataExpress.exe "путь к базе" {@ [набор] <команд/> $для *DataExpress, -обрабатываемый >внутри< программы, насколько хватит ^фантазии^ @} и может например dxdb_icon добавить запись в dxdb_icon базу

jurist23rus
Эксперт
Сообщения: 2684
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 18 раз

Re: взаимодействие с dll

Сообщение jurist23rus » Вт сен 04, 2018 10:52 am

А что на счёт процедур (функций) обратного вызова. Это реализуемо в dx?
У меня сделать это не получается.

код в DX

Код: Выделить всё

type TMyCallBack = procedure (s:string);

procedure DllProc (s:string; CallBackVar:TMyCallBack );
external 'DllProc@Test.dll stdcall';

procedure CallbackProc (s:string);
 begin
   debug (s);
 end;

procedure MyProc (s:string);
var
  proc: TMyCallBack;
begin
 proc := @CallbackProc;
 DllProc ('123', proc)
end;


код в dll

Код: Выделить всё

type TMyCallBack = procedure (s:string); stdcall;

procedure DllProc (s:string; CallBackVar:TMyCallBack ); stdcall;
begin
  s := S+'345';
  CallBackVar (s);
end;

exports
  DllProc                   name 'DllProc';
Destiny is a very convenient word for those who never take decisions.