powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
8 сообщений из 8, страница 1 из 1
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39671683
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите найти причину Access Violation?
Поясню непонятное название темы )
Набросал небольшую утилиту к базе данных, которая формирует rtf-документы.
Смысл ее в том, что она слушает Events от FB, когда получает, читает таблицу очереди, и формирует ожидаемые документы.
Программка консольная, x64, стоит на сервере. Если ее запустить, то она сразу сама читает очередь (без FDEventAlerter.OnAlert).
Чтобы срабатывал OnAlert, поменял Options.Synchronize у FDEventAlerter в False;
Для некоторых типов все заработало, она получает команду, создает файлы, сохраняет их в базу, все отлично.
Для следующего типа понадобилось склонять ФИО и должности (через PadegUC.dll).
И, в общем, столкнулся, что если программа читает таблицу очереди и формирует документы при своем запуске (а не по команде OnAlert), то документ формируется (ФИО и должность склоняются).
А если команда приходит в уже работающее приложение через OnAlert, то в момент вызова функции из dll происходит Acess Violation.
Больше ни в чем, кроме способа вызова, разницы не вижу.
Если я в правильном направлении думаю, подскажите, как организовать безглючную работу?

Спасибо!

Основной текст, так сказать
Код: pascal
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.
    DllHandle := LoadLibrary(PChar(ExtractFileDir(ParamStr(0))+'\PadegUC.dll')); 
    if DllHandle <> 0 then
    begin
      @GetPadeg := GetProcAddress(DllHandle, 'GetFIOPadegFSAS');
      @GetAppPadeg := GetProcAddress(DllHandle, 'GetAppointmentPadeg');
    end



class procedure TEventActions.FDAlerterAlert(ASender: TFDCustomEventAlerter;
  const AEventName: string; const AArgument: Variant);
begin
  //
  if AEventName = 'CONSTRUCTRTF' then
  begin
    while WeOnProcess do Sleep(10); //вдруг уже формируем

    WriteColoredStr('['+DateTimeToStr(Date+Time)+'] ', [], 7);
    WriteColoredStr('Получена команда формирования RTF, читаю очередь:%s', [#13#10], 3);
    ProcessQueue(False);
  end;

end;


    FIO := FDTQ2.FieldByName('FIO').AsString;
          nLen := Length(FIO) + 10;
          pResult := StrAlloc(nLen);
          try
            r := GetPadeg(PChar(FIO), 3, pResult, nLen); //вот тут вылетаем AccessViolation at address 000000000000
            if r = 0 then S := StrPas(pResult)
            else S := FIO;  
          finally
            StrDispose(pResult);
          end;

...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39671701
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, а файрбердовский padegfb.dll рушит FB ((
то срабатывает, а то бац:

SERVER Mon Jul 09 16:27:02 2018
The user defined function: GETAPPOINTMENTPADEG
referencing entrypoint: GetAppointmentPadeg
in module: PadegFB
caused the fatal exception: Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.


SERVER Mon Jul 09 16:29:59 2018
The user defined function: GETAPPOINTMENTPADEG
referencing entrypoint: GetAppointmentPadeg
in module: PadegFB
caused the fatal exception: Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.


и как теперь склоняться ))
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39671756
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillioи как теперь склоняться ))Брать исходники и смотреть
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39671770
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение что-то делает в ожидании события или просто ждет? Потому что фоновый поток с Synchronize (на чем сделан FDEventAlerter) на консольном приложении это уже достаточно стремная штука.
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39671807
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

смотрите CheckSynchronize в System.Classes

если synchronize вызывается в фоновом потоке dll, то естественно dll-ка и апликуха должна быть собрана с пакетами

если делать консоль, то кто-то должен вызывать CheckSynchronize


да, безобразная реализация, но вам с этим жить
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39672273
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillioа файрбердовский padegfb.dll рушит FB
у Firebird нет никакого pagegfb.dll. Это какая-то самописная либа. И если она криво написана, то да, будет рушить любой exe, который ее вызывает.
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39672274
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)если synchronize вызывается в фоновом потоке dll, то естественно dll-ка и апликуха должна быть собрана с пакетамиесли в "чистом" dll - то вообще будет зависон всегда. Только в BPL есть шансы, что сработает.
...
Рейтинг: 0 / 0
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
    #39672382
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из DLL вызывается только функция, никаких фоновых потоков там нет, насколько я понял.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]