One of the reasons it is so hard to write ARC a compatible source base is that there is no Delphi ARC win32 compiler. So you have to debug your memory issues using the remote debugging capabilities which – besides very slow – are unstable at best.
[WayBack] New Web Forums! | Atozed Software:As the Embarcadero forums are unreliable and often offline for long periods of time, we have created web forums in English and Portuguese for IntraWeb, but also general Delphi and Indy forums too. …
[WayBack] Embarcadero Squirrel on Vacation Again | Atozed SoftwareThe squirrel on a wheel which powers the Embarcadero Forums has gone on vacation – again. The Embarcadero forums are thus down and inoperable, again. Although we continue to use the Embarcade…
Reminder to self: extend the below very incomplete list of Delphi versions that can open a Borland Project Group file with extension .bpg (from the Delphi <= 7 era) and convert it to an XML based Group Project file with extension .grouproj (from the Delphi >= 2007 era).
Reminder to self: when you get Unknown function at TMethodImplementationIntercept in a Delphi stack trace from the Exception.StackTrace property or FastMM memory report:
Ensure you generate a .MAP or .TDS file with full debug information
Copy the .MAP or .TDS files to directory of your EXE.
This function is called to return an opaque data structure that contains stack information for the given exception information record. This function will be called when the exception is about to be raised or if this is an external exception such as an Access Violation, called soon after the object is created.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
There are a few experts Delphi needs for project management:
verify the .dproj against the .dpr as these get out of sync often, especially in multi-person or multi-branch projects
verify .dproj and .dpr against files on disk (often there are files on disk not in the Project Manager; Visual Studio has this nice [WayBack] “Show All Files” button that helps fixing this there)
If a given class constructor is eligible to be invoked (ie. it was linked into your application), it will run immediately before the initialization section for the unit in which the class is implemented. The class destructors will be invoked immediately after the finalization section for the unit in which the class is implemented.
HiDPI with VCL still needs quite a bit of work, even on running one monitor (mixing regular DPI and HiDPI monitors will likely always be a pain for any pixel based environment)…
Note figuring out errors is not always easy, as Delphi 2009 introduced the System.TMonitor record for thread synchronisation, next to the existing Forms.TMonitor class that had monitor settings.
FWIW DelphiAST is the most up to date parser for Delphi (at least that is open source) because Roman Yankovsky is fixing bugs in a timely manner and is using it for his own plugin (FixInsight) that needs to parse all kinds of source code. It is also derived from the Castalia parser but many fixes and changes have been applied since.
In addition, TestInsight (by Stefan Glienke) also uses DelphiAST and Stefan is quite well at bugging people fixing bugs in open source projects.
DelphiAST works from Delphi XE and up (parts might work in Delphi 2010 and 2009), so ancient Delphi is out.
@jpluimers
From a TIdIOHandlerSocket or TIdSocketHandle: is it possible to see who has initiated the connection? i.e. if it’s Binding.Peer that initiated to Binding.IP or the other way around?
@rlebeau
A socket is bidirectional, it doesn’t know or care which direction the connection was initially established. You will have to keep track of that yourself based on whether the socket is coming from a client component or a server component.
@jpluimers
I was afraid so. No problem: thanks for confirming.
So I made a helper class for TIdSocketHandle that gets you a SummaryString based on a direction enumeration: TIdSocketHandleHelper.