powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Странность
25 сообщений из 34, страница 1 из 2
Странность
    #38766787
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к базе fb3 то подключается, то выдаёт:
...
Рейтинг: 0 / 0
Странность
    #38766789
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
win7 x64, установлен FB 2.5.3 32-bit, IBExpert сегодняшний (просто распакован ibe_sfx, без настройки UDB, чтобы не влияло), в "D:\Firebird\3.0.0.31349" распакован 32-битный снапшот тройки (с "gsec -user sysdba -pass 1 -add sysdba -pw masterkey").
Дальше регистрирую две базы:
...
Рейтинг: 0 / 0
Странность
    #38766791
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше выхожу из эксперта, запускаю заново. Вхожу в Test25, вхожу в Test30, получаю сабж.
Дальше выхожу из эксперта, запускаю заново. Вхожу в Test30, вхожу в Test25, все Ok.

Ну и бонусом, после отключения от Test30 эксперт через минуту падает. Это я уже описывал не один раз. Нужно позвать fb_shutdown перед последней FreeLibrary для конкретной либы тройки (и для 2.5.3).
...
Рейтинг: 0 / 0
Странность
    #38766912
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эксперт тут причем?
...
Рейтинг: 0 / 0
Странность
    #38766924
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

fb_shutdown вызывать нужно. Остальное это уже не к Expert.
...
Рейтинг: 0 / 0
Странность
    #38766990
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисfb_shutdown вызывать нужно

Что-то я пока никак не пойму, почему ее приложение должно вызывать, а не сама клиентская dll перед выгрузкой из адресного пространства процесса приложения.
...
Рейтинг: 0 / 0
Странность
    #38767000
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertСимонов Денисfb_shutdown вызывать нужно

Что-то я пока никак не пойму, почему ее приложение должно вызывать, а не сама клиентская dll перед выгрузкой из адресного пространства процесса приложения. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx The entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions), because this may create dependency loops in the DLL load order. This can result in a DLL being used before the system has executed its initialization code. Similarly, the entry-point function must not call the FreeLibrary function (or a function that calls FreeLibrary) during process termination, because this can result in a DLL being used after the system has executed its termination code.

Because Kernel32.dll is guaranteed to be loaded in the process address space when the entry-point function is called, calling functions in Kernel32.dll does not result in the DLL being used before its initialization code has been executed. Therefore, the entry-point function can call functions in Kernel32.dll that do not load other DLLs. For example, DllMain can create synchronization objects such as critical sections and mutexes, and use TLS. Unfortunately, there is not a comprehensive list of safe functions in Kernel32.dll.

Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose. For example, calling User, Shell, and COM functions can cause access violation errors, because some functions load other system components. Conversely, calling functions such as these during termination can cause access violation errors because the corresponding component may already have been unloaded or uninitialized.

Because DLL notifications are serialized, entry-point functions should not attempt to communicate with other threads or processes. Deadlocks may occur as a result.
...
Рейтинг: 0 / 0
Странность
    #38767014
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все зашибись, но мне от этого не легче.
Если юзер использует одну и ту же клиентскую либу одновременно для коннекта к удаленному серверу и как embedded - когда вызывать fb_shutdown? Допустим, первым закрывается embedded коннект...
...
Рейтинг: 0 / 0
Странность
    #38767017
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот такую штуку для работы с библиотеками написал, потокобезопасную, и с вызовом fb_shutdown когда нужно:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
unit FBLibHelper;

interface

type
  IFBLibrariesHelper = interface
  ['{6226A860-A397-4DF4-9419-F377627E6979}']
    function LoadLibrary(const LibraryPath: string): HMODULE;
    function FreeLibrary(Handle: HMODULE): Boolean;
    procedure FreeAll;
  end;

var
  FBLibrariesHelper: IFBLibrariesHelper;

procedure FreeAllFBLibraries;

implementation

uses
  Windows;

type
  TFBLibrariesHelper = class(TInterfacedObject, IFBLibrariesHelper)
  private
    FCriticalSection: TRTLCriticalSection;
    FLoadedLibraries: array of HMODULE;
    FCallFbShutdownOnLastUnload: Boolean;
  protected
    { IFBLibrariesHelper }
    function LoadLibrary(const LibraryPath: string): HMODULE;
    function FreeLibrary(Handle: HMODULE): Boolean;
    procedure FreeAll;
  public
    constructor Create(ACallFbShutdownOnLastUnload: Boolean);
    destructor Destroy; override;
  end;

{ TFBLibrariesHelper }

constructor TFBLibrariesHelper.Create(ACallFbShutdownOnLastUnload: Boolean);
begin
  inherited Create;
  FCallFbShutdownOnLastUnload := ACallFbShutdownOnLastUnload;
  InitializeCriticalSection(FCriticalSection);
end;

destructor TFBLibrariesHelper.Destroy;
begin
  DeleteCriticalSection(FCriticalSection);
  inherited;
end;

procedure TFBLibrariesHelper.FreeAll;
var
  I: Integer;
begin
  EnterCriticalSection(FCriticalSection);
  try
    for I := High(FLoadedLibraries) downto 0 do
      Self.FreeLibrary(FLoadedLibraries[I]);
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

function TFBLibrariesHelper.FreeLibrary(Handle: HMODULE): Boolean;

  procedure Extract(Handle: HMODULE; out IsLastWithThisHandle: Boolean);
  var
    I, J: Integer;
  begin
    IsLastWithThisHandle := False;
    for I := 0 to High(FLoadedLibraries) do
    begin
      if FLoadedLibraries[I] = Handle then
      begin
        IsLastWithThisHandle := True;
        for J := I + 1 to High(FLoadedLibraries) do
        begin
          if FLoadedLibraries[J] = Handle then
            IsLastWithThisHandle := False;
          FLoadedLibraries[J - 1] := FLoadedLibraries[J];
        end;
        SetLength(FLoadedLibraries, Length(FLoadedLibraries) - 1);
        Exit;
      end;
    end;
//    Assert(False);
  end;

const
  fb_shutrsn_svc_stopped      = -1;
  fb_shutrsn_no_connection    = -2;
  fb_shutrsn_app_stopped      = -3;
  fb_shutrsn_device_removed   = -4;
  fb_shutrsn_signal           = -5;
  fb_shutrsn_services         = -6;
  fb_shutrsn_exit_called      = -7;

var
  IsLastWithThisHandle: Boolean;
//  fb_shutdownRes: Integer;
  fb_shutdown: function(timeout: Cardinal; const reason: Integer): Integer; {$IFDEF UNIX} cdecl; {$ELSE} stdcall; {$ENDIF}
begin
  EnterCriticalSection(FCriticalSection);
  try
    Extract(Handle, IsLastWithThisHandle);
    if IsLastWithThisHandle and FCallFbShutdownOnLastUnload then
    begin
      fb_shutdown := GetProcAddress(Handle, 'fb_shutdown');
      if Assigned(fb_shutdown) then
        {fb_shutdownRes := }fb_shutdown(60000, fb_shutrsn_app_stopped); // other good connections had been dropped
      Result := Boolean(Windows.FreeLibrary(Handle));
      IsLastWithThisHandle := True;
    end
    else
      Result := Boolean(Windows.FreeLibrary(Handle));
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

function TFBLibrariesHelper.LoadLibrary(
  const LibraryPath: string): HMODULE;
begin
  EnterCriticalSection(FCriticalSection);
  try
//    if (Pos(':', LibraryPath) <> 0) or (Pos('\', LibraryPath) <> 0) then
//      Result := Windows.LoadLibraryEx(PChar(LibraryPath), 0, LOAD_WITH_ALTERED_SEARCH_PATH)
//    else
    Result := Windows.LoadLibrary(PChar(LibraryPath)); // now it normally works with embedded loaded by full path
    if Result > HINSTANCE_ERROR then
    begin
      SetLength(FLoadedLibraries, Length(FLoadedLibraries) + 1);
      FLoadedLibraries[High(FLoadedLibraries)] := Result;
    end;
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

procedure FreeAllFBLibraries;
begin
  if Assigned(FBLibrariesHelper) then
    FBLibrariesHelper.FreeAll;
end;

initialization
  FBLibrariesHelper := TFBLibrariesHelper.Create(True);
finalization
  FreeAllFBLibraries;
  FBLibrariesHelper := nil;
end.

...
Рейтинг: 0 / 0
Странность
    #38767018
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertЭто все зашибись, но мне от этого не легче.
Если юзер использует одну и ту же клиентскую либу одновременно для коннекта к удаленному серверу и как embedded - когда вызывать fb_shutdown?
Как положено, перед последним FreeLibrary для этой библиотеки :)
...
Рейтинг: 0 / 0
Странность
    #38767023
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeКак положено, перед последним FreeLibrary для этой библиотеки :)

Положено вот так:

it should never be called by a client in the context of a remote attachment.

Короче, где-нибудь в документации описано, когда надо, а когда не надо (нельзя) ее вызывать?
...
Рейтинг: 0 / 0
Странность
    #38767026
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertКороче, где-нибудь в документации описано, когда надо, а когда не надо (нельзя) ее вызывать?
Это подойдёт?
...
Рейтинг: 0 / 0
Странность
    #38767034
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЭто подойдёт?

Те же яйца, вид сбоку... В общем случае приложение не может знать, что вот этот конкретный вызов FreeLibrary - он последний и надо сначала дергать fb_shutdown.
...
Рейтинг: 0 / 0
Странность
    #38767127
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВ общем случае приложение не может знать, что вот этот конкретный вызов FreeLibrary - он последний и надо сначала дергать fb_shutdown.
Если не умеет считать ссылки, то не может.
По-хорошему нужно чтобы подсчётом сама dll занималась, тогда можно свободно вызывать fb_shutdown перед каждым FreeLibrary. А dll пусть сама решает на каком fb_shutdown сделать shutdown.
...
Рейтинг: 0 / 0
Странность
    #38767135
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЕсли не умеет считать ссылки, то не может.


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

NickDeeПо-хорошему нужно чтобы подсчётом сама dll занималась, тогда можно свободно вызывать fb_shutdown перед каждым FreeLibrary. А dll пусть сама решает на каком fb_shutdown сделать shutdown.

Вот именно. Уж счетчик-то дергать в DllMain ничто не мешает.
...
Рейтинг: 0 / 0
Странность
    #38767238
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЯ вот такую штуку для работы с библиотеками написал, потокобезопасную, и с вызовом fb_shutdown когда нужно:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
unit FBLibHelper;

interface

type
  IFBLibrariesHelper = interface
  ['{6226A860-A397-4DF4-9419-F377627E6979}']
    function LoadLibrary(const LibraryPath: string): HMODULE;
    function FreeLibrary(Handle: HMODULE): Boolean;
    procedure FreeAll;
  end;

var
  FBLibrariesHelper: IFBLibrariesHelper;

procedure FreeAllFBLibraries;

implementation

uses
  Windows;

type
  TFBLibrariesHelper = class(TInterfacedObject, IFBLibrariesHelper)
  private
    FCriticalSection: TRTLCriticalSection;
    FLoadedLibraries: array of HMODULE;
    FCallFbShutdownOnLastUnload: Boolean;
  protected
    { IFBLibrariesHelper }
    function LoadLibrary(const LibraryPath: string): HMODULE;
    function FreeLibrary(Handle: HMODULE): Boolean;
    procedure FreeAll;
  public
    constructor Create(ACallFbShutdownOnLastUnload: Boolean);
    destructor Destroy; override;
  end;

{ TFBLibrariesHelper }

constructor TFBLibrariesHelper.Create(ACallFbShutdownOnLastUnload: Boolean);
begin
  inherited Create;
  FCallFbShutdownOnLastUnload := ACallFbShutdownOnLastUnload;
  InitializeCriticalSection(FCriticalSection);
end;

destructor TFBLibrariesHelper.Destroy;
begin
  DeleteCriticalSection(FCriticalSection);
  inherited;
end;

procedure TFBLibrariesHelper.FreeAll;
var
  I: Integer;
begin
  EnterCriticalSection(FCriticalSection);
  try
    for I := High(FLoadedLibraries) downto 0 do
      Self.FreeLibrary(FLoadedLibraries[I]);
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

function TFBLibrariesHelper.FreeLibrary(Handle: HMODULE): Boolean;

  procedure Extract(Handle: HMODULE; out IsLastWithThisHandle: Boolean);
  var
    I, J: Integer;
  begin
    IsLastWithThisHandle := False;
    for I := 0 to High(FLoadedLibraries) do
    begin
      if FLoadedLibraries[I] = Handle then
      begin
        IsLastWithThisHandle := True;
        for J := I + 1 to High(FLoadedLibraries) do
        begin
          if FLoadedLibraries[J] = Handle then
            IsLastWithThisHandle := False;
          FLoadedLibraries[J - 1] := FLoadedLibraries[J];
        end;
        SetLength(FLoadedLibraries, Length(FLoadedLibraries) - 1);
        Exit;
      end;
    end;
//    Assert(False);
  end;

const
  fb_shutrsn_svc_stopped      = -1;
  fb_shutrsn_no_connection    = -2;
  fb_shutrsn_app_stopped      = -3;
  fb_shutrsn_device_removed   = -4;
  fb_shutrsn_signal           = -5;
  fb_shutrsn_services         = -6;
  fb_shutrsn_exit_called      = -7;

var
  IsLastWithThisHandle: Boolean;
//  fb_shutdownRes: Integer;
  fb_shutdown: function(timeout: Cardinal; const reason: Integer): Integer; {$IFDEF UNIX} cdecl; {$ELSE} stdcall; {$ENDIF}
begin
  EnterCriticalSection(FCriticalSection);
  try
    Extract(Handle, IsLastWithThisHandle);
    if IsLastWithThisHandle and FCallFbShutdownOnLastUnload then
    begin
      fb_shutdown := GetProcAddress(Handle, 'fb_shutdown');
      if Assigned(fb_shutdown) then
        {fb_shutdownRes := }fb_shutdown(60000, fb_shutrsn_app_stopped); // other good connections had been dropped
      Result := Boolean(Windows.FreeLibrary(Handle));
      IsLastWithThisHandle := True;
    end
    else
      Result := Boolean(Windows.FreeLibrary(Handle));
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

function TFBLibrariesHelper.LoadLibrary(
  const LibraryPath: string): HMODULE;
begin
  EnterCriticalSection(FCriticalSection);
  try
//    if (Pos(':', LibraryPath) <> 0) or (Pos('\', LibraryPath) <> 0) then
//      Result := Windows.LoadLibraryEx(PChar(LibraryPath), 0, LOAD_WITH_ALTERED_SEARCH_PATH)
//    else
    Result := Windows.LoadLibrary(PChar(LibraryPath)); // now it normally works with embedded loaded by full path
    if Result > HINSTANCE_ERROR then
    begin
      SetLength(FLoadedLibraries, Length(FLoadedLibraries) + 1);
      FLoadedLibraries[High(FLoadedLibraries)] := Result;
    end;
  finally
    LeaveCriticalSection(FCriticalSection);
  end;
end;

procedure FreeAllFBLibraries;
begin
  if Assigned(FBLibrariesHelper) then
    FBLibrariesHelper.FreeAll;
end;

initialization
  FBLibrariesHelper := TFBLibrariesHelper.Create(True);
finalization
  FreeAllFBLibraries;
  FBLibrariesHelper := nil;
end.


Таки нужно раскомментировать
Код: pascal
1.
2.
3.
    if (Pos(':', LibraryPath) <> 0) or (Pos('\', LibraryPath) <> 0) then
      Result := Windows.LoadLibraryEx(PChar(LibraryPath), 0, LOAD_WITH_ALTERED_SEARCH_PATH)
    else
...
Рейтинг: 0 / 0
Странность
    #38767567
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В DllMain уже поздно делать шатдаун ибо ОСь уже убила все потоки, кроме текущего и никакая синхронизация просто не работает.
Т.е. движок понятия не имеет, что его вспомагательные потоки уже прибиты, и пытается честно подождать их завершения, поэтому всё вешается навсегда.

Если при этом есть незакрытые коннекты, то их кеш не будет сброшен, со всеми вытекающими последствиями.

Даже если движок обнаружит факт убиения своих потоков и не будет ждать их завершения (чтобы не вешаться), он всё равно не сможет корректно завершить свою работу, ибо объекты синхронизации, занятые убитыми потоками, не могут быть освобождены.

Т.е. всё, что можно корректно сделать в DllMain при завершении процесса - это не делать ничего...
...
Рейтинг: 0 / 0
Странность
    #38767595
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВ DllMain уже поздно делать шатдаун

Речь уже не о шатдауне в DllMain. Речь о том, чтобы в DllMain увеличивать некий внутренний счетчик на DLL_PROCESS_ATTACH и, соответственно, уменьшать его на DLL_PROCESS_DETACH. Тогда при вызове fb_shutdown и значении счетчика = 1 можно спокойно освобождать все, что там нужно освобождать, а пользователю надо будет вызывать fb_shutdown всегда перед FreeLibrary, не занимаясь самодеятельностью в виде подсчета вызовов LoadLibrary/FreeLibrary.
...
Рейтинг: 0 / 0
Странность
    #38767743
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertРечь уже не о шатдауне в DllMainЯ должен был объяснить, почему мы сами не можем сделать шатдаун из DllMain.

IBExpertРечь о том, чтобы в DllMain увеличивать некий внутренний счетчик на DLL_PROCESS_ATTACH и, соответственно, уменьшать его на DLL_PROCESS_DETACH. Тогда при вызове fb_shutdown и значении счетчика = 1 можно спокойно освобождать все, что там нужно освобождатьИдея не плохая. На первый взгляд. А вот на второй... это тоже не будет работать:
а) ты сам приводил пример с плагином, который тоже загружает dll. А где гарантия того, что этот плагин её потом честно выгружает ? Т.е. такому счётчику доверять на 100% нельзя.
б) а если пользователю надо сделать fb_shutdown и пофигу сколько раз загружали\выгружали dll ?

Уж скорее я буду думать о симметричном вызове fb_initialize и вот он, в паре с fb_shutdown, уже пусть поддерживает счётчик. Хотя, от кривого плагина это тоже не защитит :(
...
Рейтинг: 0 / 0
Странность
    #38767845
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladИдея не плохая. На первый взгляд. А вот на второй... это тоже не будет работать:
а) ты сам приводил пример с плагином, который тоже загружает dll. А где гарантия того, что этот плагин её потом честно выгружает ? Т.е. такому счётчику доверять на 100% нельзя.


Счетчик честно считает то, что он и должен считать: количество загрузок и выгрузок.
Если плагин не выгружает dll, то, стало быть, ему это не надо, и останется она невыгруженной, только и всего. Сейчас-то даже если и плагин, и хост-приложение честно сделают fb_shutdown и выгрузят dll - это не гарантирует отсутствие проблем.

hvladб) а если пользователю надо сделать fb_shutdown и пофигу сколько раз загружали\выгружали dll ?


Соответствующий параметр или отдельная функция.
...
Рейтинг: 0 / 0
Странность
    #38779045
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае ошибки Process Monotor выдаёт строчку:
Код: plaintext
IBExpert.exe QueryOpen D:\Firebird\3.0.0.31378\plugins\Engine12	NAME NOT FOUND
И ведь Engine12 действительно нет, есть engine12.dll, о чём собственно и ошибка в первом посте,
только он там пытается грузить D:\Firebird\3.0.0.31378\plugins/Engine12, именно с обратным слэшем.

А в случае когда проходит успешный коннект, упоминания о Engine12 нет, а есть толко о engine12.dll:
Код: plaintext
IBExpert.exe QueryOpen D:\Firebird\3.0.0.31378\plugins\engine12.dll SUCCESS

И ещё почему-то в firebird.log ошибка загрузки не прописалась, хотя она существенная.
...
Рейтинг: 0 / 0
Странность
    #38779547
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм,тоже налетел на:

Код: plaintext
1.
2.
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Error loading plugin Engine12.
Module C:\Program Files\Firebird\Firebird_3_0\plugins/Engine12 exists but can not be loaded.

Это как то лечится? Через isql пользовать не хочется...
...
Рейтинг: 0 / 0
Странность
    #38779599
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разобрался :)
...
Рейтинг: 0 / 0
Странность
    #38779622
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarразобрался :)
Что было?
...
Рейтинг: 0 / 0
Странность
    #38779652
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanGallemarразобрался :)
Что было?
Разрядность...
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Странность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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