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

Помогите найти причину 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
09.07.2018, 16:37
    #39671701
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
Блин, а файрбердовский 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
09.07.2018, 18:00
    #39671756
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
Devillioи как теперь склоняться ))Брать исходники и смотреть
...
Рейтинг: 0 / 0
09.07.2018, 18:28
    #39671770
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
Приложение что-то делает в ожидании события или просто ждет? Потому что фоновый поток с Synchronize (на чем сделан FDEventAlerter) на консольном приложении это уже достаточно стремная штука.
...
Рейтинг: 0 / 0
09.07.2018, 20:07
    #39671807
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDEventAlerter.Options.Synchronize в консольном прилож и dll - могут ли быть тут проблемы?
Devillio,

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

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

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


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


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