Код: Выделить всё
unit MemData;
procedure TData.PutFieldData(Field: TFieldDesc; FieldBuf: IntPtr; Source: IntPtr; IsDatabaseValue: boolean = False);
...
dtExtString: begin
StringHeap.DisposeBuf(Marshal.ReadIntPtr(FieldBuf));
Marshal.WriteIntPtr(FieldBuf, StringHeap.AllocStr(Source)); //тут тоже ошибка
end;
dtExtWideString: begin
StringHeap.DisposeBuf(Marshal.ReadIntPtr(FieldBuf));
//так было
//Marshal.WriteIntPtr(FieldBuf, StringHeap.AllocWideStr(Source));
//а где то так должно быть
Marshal.WriteIntPtr(FieldBuf, StringHeap.AllocWideStr(Source, False, Min(StrLenW(Source), Field.Length)));
end;
Код: Выделить всё
unit MemData;
procedure TData.GetFieldData(Field: TFieldDesc; FieldBuf: IntPtr; Dest: IntPtr);
...
dtExtString: begin
...
StrCopy(PAChar(Dest), Marshal.ReadIntPtr(FieldBuf));
end;
dtExtWideString: begin
...
StrCopyW(Dest, Marshal.ReadIntPtr(FieldBuf));
end;