Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEScript.dll + UTF8 / 6 сообщений из 6, страница 1 из 1
09.08.2019, 14:14
    #39847491
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
В кодировке Вин1251 все давно и нормально работает, но на новом проекте решил взять все новое и современное ))
Итак: FB4 beta1, CharSet UTF8

сделал тестовый скриптик в UTF-8 с кривым SQL, вначале добавил "SET NAMES UTF8;" (но это роли не играет). Пытаюсь выполнить по примеру:

Код: 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.
class function TfmDBUpdate.DLLConnect(hLib: THandle): Boolean;
var pConn: TConnectDBProc;
    b: TStringBuilder;
begin
     Result := false;
     pConn := GetProcAddress(hLib, 'Connect');
     if Assigned(pConn) then
     begin
       b := TStringBuilder.Create;
       try
         b.Append('db_name="').Append(dmData.dbMain.DBName).Append('"').Append(';')
          .Append('user_name=').Append(dmData.dbMain.ConnectParams.UserName).Append(';')
          .Append('password=').Append(dmData.dbMain.ConnectParams.Password).Append(';')
          .Append('clientlib="').Append(dmData.dbMain.LibraryName).Append('"').Append(';')
          .Append('lc_ctype=').Append(dmData.dbMain.ConnectParams.CharSet).Append(';')
          .Append('sql_dialect=3');
         if pConn(PChar(b.ToString), nil) > 0 then
          Result := true;
       finally
         b.Free;
       end;
     end;
end;

function HandleError(AStmtText, AErrMessage : PChar) : integer; stdcall;
begin
     Result := 0;
     Inc(ErrCount);
     ShowAppMessage(AErrMessage, AStmtText, mtError);
end;

class function TfmDBUpdate.ExecScriptFile(const AFilename: string): Boolean;
var Hndl : THandle;
    ESP : TExecuteScriptProc;
begin
  Result := false;
  ErrCount := 0;
  StmtCount := 0;
  Hndl := LoadLibrary(PChar('IBEScript.dll'));
  try
    if (Hndl > HINSTANCE_ERROR) then
    begin
      if not DLLConnect(Hndl) then
       exit;
      ESP := GetProcAddress(Hndl, 'ExecScriptFile');
      if @ESP <> nil then
      begin
       ESP(PChar(AFilename), @HandleError, @BeforeExec, @AfterExec);
       if ErrCount = 0 then
        Result := true;
      end;
    end;
  finally
    DLLDisconnect(Hndl);
    if Hndl > HINSTANCE_ERROR then
      FreeLibrary(Hndl);
  end;



Проблема: в HandleError вылазит текст кракозябрами.
...
Рейтинг: 0 / 0
09.08.2019, 15:39
    #39847545
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
скрипт простенький:
Код: sql
1.
2.
3.
4.
5.
SET NAMES UTF8;

insert into SYS$LOG (OBJECT_TYPE_ID, ACTION_ID, OBJECT_ID, INFO)
values (1, 1, 1, 'Загрузка скрипта UTF');
commit;
...
Рейтинг: 0 / 0
09.08.2019, 16:22
    #39847580
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
mvb,

а Эксперт причём здесь?
...
Рейтинг: 0 / 0
09.08.2019, 20:59
    #39847701
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
KreatorXXI,

через IBExpert и IBEScript.exe все выполняется, через IBEScript.dll вот такая бяка. Судя по тому, что PAnsiChar заменен на PChar, либа умеет UTF, но где-чего докрутить не пойму..
...
Рейтинг: 0 / 0
16.08.2019, 06:54
    #39850116
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
Тоже не понял, при чем тут эксперт? Сообщение об ошибке в UTF8, перекодировка перед скармливанием его кому-ты-там-его-скармливаешь - полностью на твоей совести. Судя по скриншоту, ты скармливаешь его редактору, который UTF8 не умеет, а умеет UTF16. В интерфейсе IBEScript.dll PChar - это PAnsiChar.
...
Рейтинг: 0 / 0
17.08.2019, 11:22
    #39850650
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBEScript.dll + UTF8
IBExpertВ интерфейсе IBEScript.dll PChar - это PAnsiChar.
Вот этой гаечки и не хватало, сделал через UTF8ToString(PAnsiChar(AStmtText)) и все поехало. А вы говорите, при чем тут эксперт ))
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEScript.dll + UTF8 / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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