Имеется Delphi 11.3, EhLib 10.2. Для теста создал простое приложение, все что там есть: MemTableEh, DataSource, Edit и DBGridEh. В MemTableEh есть одно текстовое поле Name. Заполняю его данными, при вводе текста в Edit на событии OnChange делаю:
Код:
MemTableEh1.Filter:='(Name LIKE ''%'+Edit1.Text+'%'') ';
MemTableEh1.Filtered:=true;
На 32 битной версии приложения все нормально работает, но стоит запустить 64 битную версию и при попытке фильтрации получаю ошибку при попытке установить "Filtered:=true" - c0000005 ACCESS_VIOLATION.
Куда копать, что делать, в чем причина?
ДОПОЛНЕНИЕ:
Проверил программу с исходниками EhLib. В модуле MemTableDataEh строка 6809 есть функция:
Код:
function FilterDataStartPos(AFilterData: TExprData): Pointer;
begin
Result := Pointer(IntPtr(PByte(AFilterData)) + CANHDRSIZE + StartPos);
end;
Result в случае х64 приложения получается строка короткая для адреса х64.
Тип IntPtr определен в модуле EhLibVCL строка 41:
Код:
{$IFDEF EH_LIB_9}
IntPtr = Integer;
{$ELSE}
IntPtr = NativeInt;
{$ENDIF}
В этой ситуации очевидно IntPtr определяется как Integer, если закомментировать и оставить только "IntPtr = NativeInt;", то ошибки нет.