Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Странность / 25 сообщений из 34, страница 1 из 2
04.10.2014, 09:13
    #38766787
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
к базе fb3 то подключается, то выдаёт:
...
Рейтинг: 0 / 0
04.10.2014, 09:25
    #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
04.10.2014, 09:33
    #38766791
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
Дальше выхожу из эксперта, запускаю заново. Вхожу в Test25, вхожу в Test30, получаю сабж.
Дальше выхожу из эксперта, запускаю заново. Вхожу в Test30, вхожу в Test25, все Ok.

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

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

Что-то я пока никак не пойму, почему ее приложение должно вызывать, а не сама клиентская dll перед выгрузкой из адресного пространства процесса приложения.
...
Рейтинг: 0 / 0
04.10.2014, 18:34
    #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
04.10.2014, 19:39
    #38767014
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
Это все зашибись, но мне от этого не легче.
Если юзер использует одну и ту же клиентскую либу одновременно для коннекта к удаленному серверу и как embedded - когда вызывать fb_shutdown? Допустим, первым закрывается embedded коннект...
...
Рейтинг: 0 / 0
04.10.2014, 19:46
    #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
04.10.2014, 19:48
    #38767018
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
IBExpertЭто все зашибись, но мне от этого не легче.
Если юзер использует одну и ту же клиентскую либу одновременно для коннекта к удаленному серверу и как embedded - когда вызывать fb_shutdown?
Как положено, перед последним FreeLibrary для этой библиотеки :)
...
Рейтинг: 0 / 0
04.10.2014, 20:13
    #38767023
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
NickDeeКак положено, перед последним FreeLibrary для этой библиотеки :)

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

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

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

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


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

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

Вот именно. Уж счетчик-то дергать в DllMain ничто не мешает.
...
Рейтинг: 0 / 0
05.10.2014, 16:34
    #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
06.10.2014, 10:36
    #38767567
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
В DllMain уже поздно делать шатдаун ибо ОСь уже убила все потоки, кроме текущего и никакая синхронизация просто не работает.
Т.е. движок понятия не имеет, что его вспомагательные потоки уже прибиты, и пытается честно подождать их завершения, поэтому всё вешается навсегда.

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

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

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

Речь уже не о шатдауне в DllMain. Речь о том, чтобы в DllMain увеличивать некий внутренний счетчик на DLL_PROCESS_ATTACH и, соответственно, уменьшать его на DLL_PROCESS_DETACH. Тогда при вызове fb_shutdown и значении счетчика = 1 можно спокойно освобождать все, что там нужно освобождать, а пользователю надо будет вызывать fb_shutdown всегда перед FreeLibrary, не занимаясь самодеятельностью в виде подсчета вызовов LoadLibrary/FreeLibrary.
...
Рейтинг: 0 / 0
06.10.2014, 12:50
    #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
06.10.2014, 13:50
    #38767845
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
hvladИдея не плохая. На первый взгляд. А вот на второй... это тоже не будет работать:
а) ты сам приводил пример с плагином, который тоже загружает dll. А где гарантия того, что этот плагин её потом честно выгружает ? Т.е. такому счётчику доверять на 100% нельзя.


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

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


Соответствующий параметр или отдельная функция.
...
Рейтинг: 0 / 0
16.10.2014, 19:04
    #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
17.10.2014, 11:05
    #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
17.10.2014, 11:29
    #38779599
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
разобрался :)
...
Рейтинг: 0 / 0
17.10.2014, 11:40
    #38779622
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
Gallemarразобрался :)
Что было?
...
Рейтинг: 0 / 0
17.10.2014, 11:52
    #38779652
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность
wadmanGallemarразобрался :)
Что было?
Разрядность...
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Странность / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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