Jump to content

chkaufmann

Members
  • Content Count

    145
  • Joined

  • Last visited

Community Reputation

17 Good

Technical Information

  • Delphi-Version
    Delphi 11 Alexandria

Recent Profile Visitors

2941 profile views
  1. chkaufmann

    Sports and Swimming Software

    I would be interested to know if anyone in these forums also deals with software for swimming and sports written in Delphi. Christian
  2. chkaufmann

    Profiler for Delphi

    Thanks for your instructions. I did like this, but when I call map2pdb I get a long list of errors. For example I get many lines like "Debug: Module has no source files: xxxxxxx" where xxxxxxx is the name of a unit, that is part of the project. Then the only thing I can start in VTune is "Hotspots". This runs fine and at the end I get a summary report. But this is not really helpfull since the "Top Hotspots" are Windows calls only. Using the Caller/Callee I can find my units, but when I open I don't see a lot: Percentage is there, CPU Time is zero most of the times and I don't see the number of calls. I used AQTime before, but support and I have no working version anymore. They had a call tree and a graphic where you could easily navigate down all routines. Maybe I just didn't find the correct view in VTune yet. My questions - Should I care about these errors when creating the pdb file? How to understand the error and how to solve it? - Where can I find a good tutorial for VTune in order to get the info I used before with AQTime? Thanks for any help Christian
  3. I'm using Superobjects to handle JSON data. Now I have to handle a result, where there are identifiers with dots: { "splash.annually": "normal" } This library cannot handle this data because it looks at "splash.annually" as path. Can somebody recommend me another library? What I like with Superobjects: It is fast and it offers reference counted object handling using interfaces. Regards Christian
  4. chkaufmann

    Verify certificate with TIdHTTP

    Yes. But I just set a break point in DoVerifyPeer without event assigned to OnVerifyPeer. Now I added an event and it works. What I don't understand, how I can verify that it is really the original certificate from my server. The Url is https://www.swimrankings.net/. The event is called two times. Both times AOk=False, once AError is 20, the second time it is 21. When I set AOk to true, the request works, if I do nothing in the event, the request doesn't work at all. With my limited knowledge about encryption I'm a bit lost here. Christian
  5. chkaufmann

    Verify certificate with TIdHTTP

    I use TIdHTTP to make REST requests to my server. In order to avoid that somebody can analyze the traffic between my application and the server I would like to verify the certificate. Right now my code looks like this: sslIO := TIdSSLIOHandlerSocketOpenSSL.Create(Self); sslIO.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; sslIO.SSLOptions.Mode := sslmUnassigned; sslIO.SSLOptions.VerifyMode := []; sslIO.SSLOptions.VerifyDepth := 0; FHttp.IOHandler := sslIO; I found some examples and tried to add an OnVerifyPeer event. But this event is never called. Are there any more options I have to set? Can somebody point me to a working example? Thanks Regards Christian
  6. chkaufmann

    Access violation in library code

    No, there is no such check in SetElements. In this case here, these are persistent objects. But I added a TMonitor.Enter / Leave arround the access of TBSDictionary/TDictionary since the code runs in an application with multiple threads and it may happen, that two threads run the method GetBasispunkt for the same object at the same time. Since the error is not reproducable, this may solve the problem.
  7. chkaufmann

    Access violation in library code

    I have an error in my application. It happens from time to time on my server, but I cannot reproduce it. The call stack from madExcept looks like this: exception number : 1 exception class : EAccessViolation exception message : Access violation at address 0040BB2E in module 'Logo12RestAPI.exe'. Read of address FFFFFFF9. thread $1b78 (TIdThreadWithTask): 0040bb2e Logo12RestAPI.exe System 22 @UStrAsg 022e67aa Logo12RestAPI.exe geoRefBOImp 60 {System.Generics.Collections}TDictionary<System.string,mainBO.IBasispunkt>.DoAdd 022e7303 Logo12RestAPI.exe geoRefBOImp 60 {System.Generics.Collections}TDictionary<System.string,mainBO.IBasispunkt>.AddOrSetValue 022e5e1f Logo12RestAPI.exe geoRefBOImp 1580 {BSCollectionsImp}TBSDictionary<System.string,mainBO.IBasispunkt>.SetElements 022d5fa5 Logo12RestAPI.exe geoRefBOImp 1586 TLocation.GetBasispunkt 022d7cff Logo12RestAPI.exe geoRefBOImp 1890 TLocation.Ukm 00411300 Logo12RestAPI.exe System 22 @IntfClear 00411321 Logo12RestAPI.exe System 22 @IntfCopy 00411300 Logo12RestAPI.exe System 22 @IntfClear 02847e35 Logo12RestAPI.exe restAPIServer 1306 TRestAPIGetEntities.Basispunkte Can anybody give me a hint, where the problem could be located? I work with Delphi 11, Version 28.0.44500.8973. Christian
  8. chkaufmann

    Problems with Delphi class structure / visibility

    private and protected are "friends" for classes within the same unit. If you don't want that, use "strict private" and "strict protected". For your second problem, you should provide an example. It is not clear to me what doesn't work. And by the way: When you write questions like this in a forum where most of the answers come from volunteers, you probably end up on the ignore list of many of them. Regards Christian
  9. chkaufmann

    Record as result for BackgroundWorker

    oops, that's embarrassing, thanks! Christian
  10. I define a BackgroundWorker like this: FUIWorker := Parallel.BackgroundWorker; FUIWorker .Execute( procedure(const AWorkItem: IOmniWorkItem) var p : TPrepareAusfuehrungen; r : TPrepareResult; begin p := TPrepareAusfuehrungen.Create(AWorkItem.Data.ToRecord<TPrepareSettings>); try r := p.Execute(AWorkItem.CancellationToken); if not AWorkItem.CancellationToken.IsSignalled then AWorkItem.Result := TOmniValue.FromRecord<TPrepareResult>(r); finally p.Free; end; end) .OnRequestDone( procedure(const ASender: IOmniBackgroundWorker; const AWorkItem: IOmniWorkItem) var r : TPrepareResult; begin r := AWorkItem.Data.ToRecord<TPrepareResult>; ...... end); This fails in OnRequestDone with an AV. When I change it so that the result value is just an IInterface it works. So my question is, how can I make it work with a "record" result? Or should I always create an interfaced object for this? Christian
  11. chkaufmann

    Raw Request Logging for TIdHTTPServer

    Hi, I have to log each POST request to my TIdHTTPServer to a file. When I look at TIdHttpRequestInfo I don't find a property with the full data sent to my server. Do I have to combine RawHeaders and PostStream in order to get the full request? Is there something else, where data is written to? Is there a method I didn't see in order to get all this information in one block? Regards Christian
  12. chkaufmann

    Close application during form create??

    I use ExitProcess(AExitCode). Christian
  13. chkaufmann

    Find usage of indexed default property

    Thanks, good idea. I forgot that one.
  14. chkaufmann

    Find usage of indexed default property

    This is a solution, but I have too many places where I use the property. So this is not an option in this case.
  15. In my interface I have the following property: IBSEntityProvider = interface function GetItems(AItemId: Integer): IBSEntity; property Items[AItemId: Integer]: IBSEntity read GetItems; default; end; Now I need to know, where this is used in my application. For a method I can use grep or, if the method has a common name, I put a "deprecated" in the method declaration and use the list of warnings. In this case here, it doesn't work. But maybe somebody has another trick for this problem. Christian
×