Jump to content

Jacek Laskowski

Members
  • Content Count

    267
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Jacek Laskowski

  1. I register classes and factories in Spring: container.RegisterType<TMyClass>; container.RegisterFactory<TMyClassFactory>; Then in the code I use: fClassFactory: TMyClassFactory; [...] begin lMyClass: = fClassFactory(); [some code] lMyClass.Free; <- who is responsible? end; Who is responsible for the release of the object? Spring or me?
  2. Jacek Laskowski

    10.3 Consumes 45% of my CPU

    I install WinDbg, but where is "Configure Symbols" window?
  3. Jacek Laskowski

    GetIt: missing all the TurboPower component

    FastReport is also missing...
  4. The REST Library in Delphi Rio has a serious error. I was last weekend at the world's largest HackYeah hackathon, where I needed to use the Delphi Rio to connect to the rest service. However, I could not. REST Debbuger did not return any error or response after calling the request (button Send Request). I lost a lot of time on the verification of network connections and the operation of the server itself (I thought that a heavy load on the hackatone participants "killed" the server) but it turned out to be a mistake in the REST Library. When I tried to call the request directly from Delphi (request.Execute ()) I got an error in KERNELBASE. There is no error in Delphi Tokyo, the same code worked there, but on my laptop I only had Rio. So I was looking for a solution. Eventually, I found the place and the reason, corrected RTL file (after copy to project directory) and the code runed, but the bad taste remained. Later I will publish where the error lies.
  5. Jacek Laskowski

    Rio has a broken REST Library

    https://quality.embarcadero.com/browse/RSP-21770
  6. Jacek Laskowski

    Rio has a broken REST Library

    Bug exist in System.Net.HttpClient.Win.pas file. This is not exactly REST Library like I wrote previous, but REST uses this subsystem too. Bad function with my changes: function ReadHeader(ARequest: HINTERNET; AHeaderFlag: DWORD; const AHeaderName: string = ''): string; var LSize: Cardinal; LFlags: DWORD; LHeaderName: PWideChar; begin LFLags := AHeaderFlag; if AHeaderName <> '' then begin LFLags := LFLags or WINHTTP_QUERY_CUSTOM; LHeaderName := PWideChar(AHeaderName); end else LHeaderName := WINHTTP_HEADER_NAME_BY_INDEX; LSize := 0; WinHttpQueryHeaders(ARequest, LFLags, LHeaderName, nil, LSize, WINHTTP_NO_HEADER_INDEX); if GetLastError = ERROR_WINHTTP_HEADER_NOT_FOUND then Result := '' else begin if GetLastError <> ERROR_INSUFFICIENT_BUFFER then raise ENetHTTPException.CreateResFmt(@SNetHttpHeadersError, [GetLastError, SysErrorMessage(GetLastError, TWinHttpLib.Handle)]); SetLength(Result, LSize div SizeOf(Char) - 1); // ---------------------- my changes begin if Length(Result) = 0 then begin SetLength(Result, 1); end; // ---------------------- my changes end if WinHttpQueryHeaders(ARequest, LFLags, LHeaderName, PChar(Result), LSize, WINHTTP_NO_HEADER_INDEX) = False then raise ENetHTTPException.CreateResFmt(@SNetHttpHeadersError, [GetLastError, SysErrorMessage(GetLastError, TWinHttpLib.Handle)]); end; end; The problem occurs when a zero-length string (SetLength) is created and passed by the PChar to the WinHttpQueryHeaders() method as Nil. SetLength(Result, LSize div SizeOf(Char) - 1); //when LSize = 2 then Result is empty string I can't reproduce this case now, because I don't have access to that site that caused the error on the hackathon, and on a few other ones that I checked right now, this situation doesn't occur (the header row with 2 characters).
  7. Jacek Laskowski

    Delphi Bugs reported to QualityPortal

    Yes, it's good idea!
  8. Based on this thread: https://stackoverflow.com/questions/29958168/are-integer-reads-atomic-in-delphi it can be assumed that writing or reading Integer values (4 bytes) does not have to be atomic. It depends on the alignment. Questions: Is writing and reading 1 byte (type Byte) always atomic (and safe) operation? Is writing and reading 2 byte (type Word) always atomic (and safe) operation?
  9. Jacek Laskowski

    Inline Variables Coming in 10.3

    Next example of use inline variable to improve code clarity: Instead of unclear: fRecipients := TCollections.CreateList<TRecipient>(True); we can write: fRecipients := TCollections.CreateList<TRecipient>(var OwnsObjects = True);
×