"EhLib.Com"
https://forum.ehlib.com/ru/

TMemTableEh Delphi 11.2 AV в SetFieldData только 64bit
https://forum.ehlib.com/ru/viewtopic.php?f=4&t=3308
Страница 1 из 1

Автор:  Konctantin [ 05 мар 2023, 06:57 ]
Заголовок сообщения:  TMemTableEh Delphi 11.2 AV в SetFieldData только 64bit

Начиная с версии Delphi 11.2, сохранилось и на Delphi 11.3 при сборке проекта под платформой Windows 64-bit начала появлятся AV.
Код:
First chance exception at $00000000003D1910. Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'.


Суть проблемы вот в этой строке:
DataEvent(deFieldChange, Longint(Field));
так как сигнатура Data.DB.TDataSet.DataEvent не Longint а NativeInt - мы получаем AV, хотя в версии Delphi 11.1 было так же, но AV не было.

Проблема решается заменой Longint на NativeInt.
По сути эти 2 типа равнозначны, но видать что-то переделали ну и как водится все сломали.

Дополнительная информация.
[spoiler]
Колстек:
Код:
Data.DB.TDataSet.DataEvent(deFieldChange,2058754320)
MemTableEh.TCustomMemTableEh.DataEvent(deFieldChange,2058754320)
MemTableEh.TCustomMemTableEh.SetFieldData($26C7AB61910, ...
Data.DB.TField.SetData((49...
Data.DB.TStringField.SetAsAnsiString(???)
Data.DB.TStringField.SetAsString('1')


Пример:
Код:
program TestMt;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, DB, MemTableEh;

begin
  try
    var mt := TMemTableEh.Create(nil);
    try
      mt.FieldDefs.Add('name', ftString, 100, false);
      mt.CreateDataSet();

      //mt.AppendRecord(['hello!']);

      mt.Append();
      mt.Edit();
      mt.FieldByName('name').AsString := '1';
      mt.Post();

      mt.ApplyUpdates(0); // just another code line
    finally
      mt.Free();
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.


[/spoiler]

Автор:  EhLibSupport [ 05 мар 2023, 15:32 ]
Заголовок сообщения:  Re: TMemTableEh Delphi 11.2 AV в SetFieldData только 64bit

Добрый день.

В текущей версии библиотеки EhLib.VCL 11.0 Build 11.0.013
это ошибка уже давно исправлена.

Автор:  Konctantin [ 05 мар 2023, 15:44 ]
Заголовок сообщения:  Re: TMemTableEh Delphi 11.2 AV в SetFieldData только 64bit

Ох, совершенно забыл указать версию библиотеки (9.1).
Мы в свое время так и не смогли перейти на более новую, так как почему-то при переходе на 9.2 и выше очень много всего ломалось.
В основном это были артифакты отрисовки, но так же были и AV, которые уходили при удалении->добавлении компонента заново, но сделать это для всего проекта оказалось не реально.

Пост написал прежде всего как подсказку для таких же как и мы "некрофилов", а то мало ли ))

Страница 1 из 1 Часовой пояс: UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/