Leaderboard
Popular Content
Showing content with the highest reputation on 09/18/25 in all areas
-
ANN: HTML Component Library, HTML Report Library, HTML Editor Library version 5.0 released.
Alexander Sviridenkov posted a topic in Delphi Third-Party
What's new RAD Studio 13 Florence support. Cross-platform TrueType and PostScript font engine - reading, getting metrics, converting glyphs to SVG, paths etc. Support for WOFF, color glyphs, font features, kerning, ligatures, composite glyphs, etc. Do not use OS font libraries. Fast cross-platform text rendering using font engine - included samples for OpenGL (htcanvasOpenGLEx) and GDI+ (htcanvasGDIPEx). Rendering average page of text in OpenGL canvas takes 1-5 ms. To test it please download https://delphihtmlcomponents.com/FileBrowser.zip and select "OpenGL with custom fonts" canvas. Fast and low memory JSON parser. 7x faster and 6x less memory compared to default. Support for JSONPath, objects serialization/deserialization, iterators, dictionaries, lists, templates (convert to HTML) etc. WebUI improvements (now WebUI is availabe for all Bundle users). Improved Markdown conversion - support for task lists, etc. Support for stroke-dashoffset and font-weight in SVG. -
In one of my pet projects I recently needed a tag editor component. What I found was either paid or overly complicated so I decided to write my own: It is a single-line, scrollable tag editor. No reordering, no edit box, nothing fancy; just shows the tags which are in the .SelectedTags property. You can remove tags by clicking on them (or removing them from the .SelectedTags...) in which case the OnTagRemoved event is fired. The way new tags are added is up to you. Feel free to use it and as usual: tips and advices to improve it is more than welcome. https://github.com/aehimself/AEFramework/blob/master/AE.Comp.TagEditor.pas
-
Delphi 13 FMX applications not responding to mouse clicks on Win10 multimonitor
Lachlan Gemmell replied to Lachlan Gemmell's topic in FMX
I've discovered the issue was introduced by a rewrite of the FMX.Platform.Screen.Win.TDpPxConverter.RebuildTable in Delphi 13. That method constructs a two dimensional array TDpPxConverter.FTable of TDpPxConvertor.TCell records representing different regions of your entire display area both onscreen and off. This rewritten method however appears to leave some of those TCell record fields without a value (probably only for those with over the top multimonitor configurations like mine). Specifically it's the TDpPxConvertor.TCell.LocationDP field that appears to contain rubbish in some of the records of that TDpPxConverter.FTable two dimensional array. I'll report the issue to Embarcadero [RSS-4146] but if anyone else encounters the issue and needs a workaround let me know. My workaround is a very rough hack specific to my screen configuration so it's not worth the effort explaining it here unless others are having the same problem. -
ai coding MCP server to catch windows debug messages
Lajos Juhász replied to Javier Tarí's topic in General Help
This is from Delphi 12 @Msglines@TCompilerMsgLine@ @Msglines@TCompilerMsgLine@$bctr$qqr17Compintf@TMsgKindix20System@UnicodeStringiit3t3ox53System@%DelphiInterface$26Msglinesintf@IMessageGroup% @Msglines@TCompilerMsgLine@Draw$qqrp20Vcl@Graphics@TCanvasrx18System@Types@TRecto @Msglines@TCompilerMsgLine@GetLineText$qqrv- 9 replies
-
- ai
- claude code
-
(and 2 more)
Tagged with:
-
A simple Code Editor trick to quickly jump to predefined locations in a huge unit
Uwe Raabe replied to PeterPanettone's topic in General Help
MMX has a feature Find next/previous occurrence: Place the cursor somewhere into the specific identifier and press Shift+Alt+Right/Left. You can combine this with the IDE Search Enhancement feature, which adds all identifiers of the current unit to the Ctrl+F search box. -
ICS V9.5 has been released at: https://wiki.overbyte.eu/wiki/index.php/ICS_Download ICS is a free internet component library for Delphi 7, 2006 to 2010, XE to XE8, 10, 10.1, 10.2, 10.3, 10.4, 11, 12 and 13 and C++ Builder 10.4, 11, 12 and 13. ICS supports VCL and FMX, Win32 and Win64 targets. The distribution zip includes the latest OpenSSL 3.5.2, 3.4.2, 3.3.4, 3.2.5 and 3.0.17 for Win32 and Win64. Changes in ICS V9.5 include: 1 - Major improvements in ICS V9.5 include a new geographic component that has built in IP address databases for countries and ASN; server components have a new event called before a connection is accepted allowing 'firewall' rejection of connections based on IP address; the MQTT client and server components now support protocol 3.1.1; the automatic certification ordering component now supports Google Trust Services and other ACME suppliers, as well as Let's Encrypt; changes for the HTTP clients and servers to better support REST request APIs; 2 - Many of these improvements, and the delay finishing this release, relate to web server improvements needed to mitigate a nine month long attack on a public web server, that started with millions of accesses from two Far East IP addresses, progressed to accesses from VPNs at data centres worldwide, then finally to a botnet that caused access from over one million different IP addresses in 150 countries each week. It's not often a developer has first hand experience of such web server abuse, we try to plan for it, but rarely experience it directly. The ICS web server samples already had filtering by IP addresses and reverse DNS lookup and this worked for a few months with manual updating of the filtering lists, but this was time consuming. So a new GEO component was added with an IP address to country database that allowed specific countries to be blocked, then regions of the world, finally an ASN database allowed specific cloud/ISPs to be blocked. During these months, the ICS web server kept working, albeit slowing as logs tried to handle the vast volumes of IP addresses, needing rewrites of some ICS components. But everything is now stable and ICS capable of handling such heavy traffic. 3 - TWSocketServer has a new event OnClientAcceptFilter event called before the component accepts an incoming connection allowing filtering on the remote IP address so the connection is refused without any more events being called. This action is similar to a firewall refusing a connection, rather than opening and immediately closing it again. Before the event is called, a TIcsSessIpInfo record if filled with remote and local addresses and ports in binary and as strings, saving a lot of application code, the event can complete other record fields. This event can be used with the new GEO components to check countries and regions that should be blocked, and with the TIcsBlacklist component to stop those previously blocked addresses from accessing the server. The THttpSrv HTTP server has a similar OnHttpAcceptFilter event, and it will be added to other servers for the next release. 4 - Added a new TIcsGeoTools component that reads MaxMind formatted GEO database files using the MMDBReader component, and includes two small databases from db-ip.com, 'IP to Country Lite' and 'IP to ASN Lite', but can handle other MaxMind databases. Both databases can are available as resource files that can be linked into applications or loaded from a file to be shared between servers. There is also a country name database ICS-Countries.csv linked as a resource file that contains country GEO information. ASN is Autonomous System Name, an ISP or cloud name, that supplements reverse DNS (often missing) in identifying the owners of IP addresses. The databases are updated monthly by db-ip.com and can be downloaded from them, will try to keep ICS up to date. The TIcsGeoTools component is a self contained unit, IcsGeoUtils.pas with no dependencies, but is only available for Delphi 11 and later due to use of new language features. The component needs to be created in code and the databases required loaded before use, see the samples mentioned below. The main lookup methods are FindISOA2Code and FindASNCode, then FindCountry and FindRegion from an ISOA2 country code, region is a quick was to block all Asian countries for instance. The TIcsDomainNameCache and TIcsBlacklist now include ISOA2 and ASN fields that are included in responses and reports from these components. Beware block countries and regions may have unexpected consequences, for instance Let's Encrypt and Google validate SSL/TLS certificate domain names from multiple countries. The OverbyteIcsSslMultiWebServ and OverbyteIcsDDWebService samples use the databases in the new server OnHttpAcceptFilter event, and writes country and ASN to the web log file, as well as allowing hacker filtering using this information. The OverbyteIcsNetTools sample Trace Route now shows the country and ASN for each IP in the route to the destination, as well as reverse DNS, although the IP addresses allocated to network routers don't appear to totally accurate. These samples only use TIcsGeoTools if DEFINE USE_IcsGeoTools is set in Defs.inc. 5 - Added new components TIcsFilterList and TIcsIpAddrList to replace TestFilters using HackFilterList and TestIpWhiteList using WhiteIpList in sample OverbyteIcsSslMultiWebServ1.pas. TIcsFilterList reads same file hackfilterlist.txt containing key=value pairs which are used to filter incoming connections for path, remhost, country, useragent or referrer, trying to filter out abusive remote hosts. TIcsIpAddrList reads same file whiteiplist.txt which is a list of ASCII IP full or partial addresses, generally that should not be blocked by filters. The TIcsBlacklist has major changes including support for saving IPv6 addresses in binary as well as ASCII, they sort better in reports and take less memory, adding and checking an TSockAddrIn6 which avoids conversion to strings, and other improvements to handle one million IP addresses more efficiently. 6 - Since Let's Encrypt introduced the ACME (Automatic Certificate Management Environment) protocol to download free SSL/TLS certificates, other suppliers have added automated ordering using the same API, mostly with extra account information for commercial certificates. ICS has been tested successfully with free certificates from Google Trust Services, and should work with DigiCert, ZeroSSL and SSLcom, but these three are primarily commercial suppliers and need prepaid accounts, so not tested yet. Google Trust Services offers an excellent alternate to Let's Encrypt and offers almost the same free certificates up to 90 days with multiple wildcards, but allows the expiry days to be specified during ordering, down to three days. Some companies were reluctant to use Let's Encrypt when there was no alternative in case of extended down time, now Google offers that alternate. Apart from Let's Encrypt, suppliers use ACME external accounting to tie the ordering process to web site accounts, which is explained in comments in the OverbyteIcsSslX509Certs unit, more information will be added and the wiki pages updated soon. Google needs the Google Cloud CLI Windows application installing, type a few commands and you get the external account information Acme needs. The OverbyteIcsX509CertsTst sample has a major revision to support multiple account suppliers and to specify the external accounting information. The sample needs to be run on any servers that will order certificates to create the initial Acme account (except for Let's Encrypt), and includes a web server allowing test certificates to be ordered provided DNS points to a public IP on the server. Most suppliers provide a testing endpoint which is listed in OverbyteIcsX509CertsTst so you can order fake certificates to understand the process. There is now a facility to ask ICS servers to renew certificates on demand from the OverbyteIcsX509CertsTst sample, previously you had to mess with the INI file to force a new order. 7 - TWSocketServer has a lot of improvements relating to SSL/TLS certificates, many relating to new IcsHosts options to support suppliers other than Let'S Encrypt. IcsHosts has a new property AcmeSupplier as TAcmeSupplier which may be AcmeLetsEncrypt or AcmeGoogle (or several others), and property SupplierTitle to specify the account name of than supplier from a database. The supplier accounts database is generally maintained by the OverbyteIcsX509CertsTst sample, which must be used to create accounts for new suppliers, and which may be used to view certificate orders. SupplierTitle is used instead of specifying CertDirWork which will be looked up from C:\ProgramData\ICS-Acme-Accounts\ics-acme-accounts.db. By default, new work directories will be in: C:\ProgramData\ICS-Acme-Accounts\. CertDirWork is still supported, but it's recommended that applications move to using supplier accounts instead, which can be monitored using OverbyteIcsX509CertsTst. Google and other suppliers only work with supplier accounts, since information is needed that is not in IcsHosts. IcsHosts has other new properties: AcmeCertProfile to specify the type of certificate requested for Let's Encrypt, listed in FAcmeProfileNames array, default classic, optional tlsserver and shortlived (7 day, not yet available); AcmeCertValidity to specify certificate life in days, default 90, only Google at present, down to 3 days. Certificate ordering now makes use of the ACME Renewal Information API that specifies how many days before expiry a certificate should be renewed, and how often these dates should be rechecked to see if the certificate needs immediate renewal due to being revoked. This overrides CertExpireDays. Renewal Information is checked each time the certificate chain is checked, but is cached so there is usually only a server API call every six hours. Note with OCSP gone, this is now the only way to check if a certificate is revoked. Reworked certificate checking so if automatic ordering is enabled the Acme account information is looked up when the certificate is first loaded to get renewal information and maybe working directory, rather than only when time to order a new certificate, so there is more logging and error checking at load time. Temporary ICS self signed certificates are now created in GSSL_CERTS_DIR instead of TempPath. When starting a certificate order, if the challenges have been previously completed OK, collect order immediately, don't try to start them again. Let's Encrypt is implementing a change in the way new certificates are issued, which may be delayed a few seconds after the CSR is provided, rather than immediately, so the component now waits and checks every five seconds for the new certificate to be issued. This already happens for Google. Note this Let's Encrypt change means earlier ICS versions will soon fail to work. ICS now supports ordering SSL/TLS certificates with IP addresses as well as host domain names, tested with Let's Encrypt Staging but not available yet from live certificates. Testing showed a problem using SSL with IP addresses URLs relating to the Server Name Indication HELO feature which does not allow simple IP addresses which must be converted to domain names, ie 217.146.102.139 becomes 139.102.146.217.in-addr.arpa. Automatic certificate ordering in IcsHosts now has a database property CertRenewNow that if set true in the database using the OverbyteIcsX509CertsTst, will override certificate expiry checking and cause an immediate new certificate replacement order by in servers with IcsHosts the next time RecheckSslCerts is called by the server, typically every two hours. Fixed a long term problem where SSL/TLS server name SNI checking for a matching IcsHost used the certificate SANs that might have included a wild card, instead of the Hosts list of host names. If one IcsHost allowed wild cards it might have been found instead a specific IcsHost for a single host. 8 - New major versions of OpenSSL often add new functions and deprecate older functions that are then removed in a subsequent major release after applications should have been updated. ICS has added a DEFINE OpenSSL_Deprecated without which no deprecated functions should be loaded. ICS has been testing with a special build of OpenSSL 3.5 without deprecated functions and several units have now been updated to use newer 3.0 functions, so no more work should be necessary for OpenSSL 4.0 when those deprecated could disappear. The DEFINE OpenSSL_Deprecated should only be needed if your application uses old OpenSSL functions for encryption or signing. The OverbyteIcsJoseTst sample also needs OpenSSL_Deprecated for RSA string encryption, pending a rewrite without deprecated functions. ICS now only creates the C:\ProgramData\ICS-OpenSSL directory if conditionals OpenSSL_Resource_Files or OpenSSL_ProgramData are specified meaning OpenSSL files are expected there. Otherwise the developer is responsible for setting GSSL_DLL_DIR to the OpenSSL DLL directory. 9 - Updated the MQTT client and server components to support protocol 3.1.1 which is commonly used, previously we only supported 3.1. The client will connect to a v5 server by ignoring dozens of new options, but needs a lot more work, much more complicated than v3.1.1, not planning any more v5 unless there is a specific requirement. Added LogPackets property to log packets in ASCII and hex for diagnostics, UseSSL property to force client to use SSL on any port, BlankClient property (anonymous) for 3.1.1 so server allocates ClientId, but only v5 tells us that ID. BurstMode property for 3.1.1 so client does not wait for response to Connect, but publishes immediately. When Subscribing With v3.1.1, the server now returns a failure flag for permissions failure, which is returned as QoS qtFAILURE. Also improvements to the OverbyteIcsMQTTst sample, allow Username/Password to be set, so they may be left blank, ClientHost is now a drop down box, and includes test.mosquitto.org that may be used for client testing, see https://test.mosquitto.org/ for a long list of ports for different testing purposes, allow MQTT protocol to be specified, added v3.1.1 and v5, and options to test all new functions. If the server SSL port non-zero, the server will create an ICS CA signed certificate for the host name (ie localhost) if a certificate file bundle is not found. 10 - There are various WebSocket improvements. The client now has optional asynchronous connection which no longer blocks the initial WSConnect which now returns immediately and a OnWSConnected event is called when the connections is ready or fails, so should now correctly process a welcome message or packets sent immediately upon connection. The server now has a configurable delay after connection before sending a welcome message or packets, for clients that can not process them immediately. Fixed a problem that data sent immediately a new connection opened could be lost because the component had not switched to Websocket mode. Allow Sec-WebSocket-Protocol: header to added with HeaderSecWebSocketProtocol values (char, superchat, etc). Added a new OnWSFramesDone event called when a queue of frames have been sent, for flow control when sending a lot of data. Note the IcsAppMonMan.dpr sample illustrates how to use multiple WebSocket client components to contact multiple WebSocket servers and display information from them, it comes configured to view three public servers running ICS web, FTP and proxy servers. 11 - Fixed a long term problem with ECDSA binary digests, which have two formats, ASN.1 used by OpenSSL and IEEE P1363 which is shorter fixed length and often also used. Added IcsDigestAsntoIEEE and IcsDigestIEEEtoAsn to convert between the two formats, and a new EcdsaIEE flag to IcsAsymSignDigestTB, IcsAsymVerifyDigestTB, IcsJoseJWSJson, IcsJoseGetSigTB, IcsJoseCheckSigTB and IcsJoseCheckJWS to use the new format, only effective when using EC private keys. Signing Acme requests with EC keys now correctly use IEEE P1363 digests so finally work properly, been looking for this since 2018. 12 - CreateSelfSignCertEx now adds IP addresses to the correct alternate list, not allowed as common name. TSslCertTools has new certificate properties for more Distinguished Names, mainly for personal names: Street, SurName, GivenName, NameTitle, NameInitials, used when creating Certificate Requests. Using Description no longer gives an error. 13 - The HTTP clients THttpCli and TSslHttpRest have new properties RespAttachment (Boolean) and RespFileName, parsed from Content-Disposition: response header which can be used to offer to save content as a file, and RespRetryDT parsed from Retry-After: response header, when this request should next be repeated as TDateTime. ResponseNoException now defaults to True to skip exceptions for most connection errors like 404, etc, beware this default change may cause applications expecting exceptions to misbehave, either set it false or check StatusCode in RequestDone. 14 - In HTTP client TSslHttpRest, if HttpUploadStrat=HttpUploadSimple, add unofficial Content-Disposition request header that some web servers might check for an upload file name. Check for a Json response of any array only [] without objects. Allow GET and DELETE methods to use PContBodyJson, PContBodyUrlEn and PContBodyXML content types, beware web servers may not support this. 15 - The TRestParams component has a new RParamFmt property that for Json only defines whether nested objects or an array should be formatted, default is RPFmtNestObj (Nested Objects, same as previously), or RPFmtArrayVal (Array of Values) if first element is any array, or RPFmtArrayObj (Array of Objects) where each element is treated as object in the array. Note RPFmtArrayObj allows duplicate names in Add methods, since output into different objects. For instance: RPFmtNestObj: {"field1":"data1","field2":"data2","field3":[data1, data2, data3]} RPFmtArrayVal: [data1, data2, data3] RPFmtArrayObj: [{"field":"data1"},{"field":"data2"},{"field":[data1, data2, data3]}] 16 - In the HTTP servers THttpSrv and THttpAppSrv, allow the built in HTTP error response to be customised using new event OnHttpCustomError which is called by the error handlers with the error, path, and existing Body, that may be replaced or modified as required. Called for errors 301, 302, 307, 308, 400, 401, 403, 404, 416, 501. Added new hoContDispHdr Option and AttachmentTypes list of file extensions that if matched causes the server to add an Content-Disposition: attachment header with the filename, that should cause a browser to offer a 'Save As' dialog to save a binary file, rather than trying to display it. Note the default list includes .pdf so Acrobat files are saved rather than displayed. The Get and Delete methods now accept uploaded body content similarly to POST/PUT. The derived THttpAppSrv server has handlers for uploaded content, for THttpSrv you need to write your own. Added OnHttpAcceptFilter event called before TWSocketServer accepts an incoming connection allowing filtering on the remote IP address so the connection is refused without any more events being called. 17 - TWSocket has a new property SessionIpInfo which is TIcsSessIpInfo record set after connection with the local and remote IP addresses and ports from the socket, also socket type and protocol, as internal and string versions. Might be easier to use than various GetPeer methods. Set for accepted listen connections. Fixed a missing inherited DupConnected that meant counters did not get reset. The SSL/TLS Server Name extension does not allow raw IP addresses, so convert then to domain names, ie 217.146.102.139 becomes 139.102.146.217.in-addr.arpa. 18 - Added Windows memory reporting functions IcsMemInfoProg, IcsMemInfoGlob and IcsMemInfoPerf to the OverbyteIcsWinUtils unit, useful for server monitoring, used by the sample IcsAppMon.dpr. Also IcsMemWarning to check for low or critical memory problems, returns Warning at 85% physical or page file usage, critical at 95% usage (reboot probably required). 19 - ICS added OSCP (Online Certificate Status Protocol) support a few years ago, used to check if certificates have been revoked. But running the massive OCSP databases needed has proved challenging, and the industry is moving away from OCSP, Let's Encrypt stopped adding an OCSP URL to certificates in May 2025. OCSP adds quite a lot of code, so added new defines to ICS so OCSP code is only linked if using authorities that still support OCSP, see information about OverbyteIcsDefs.inc. This change effects many components that check certificates, if the defines are disabled OCSP properties are still available, but will be ineffective, removing the OCSP properties would in too many form errors. Another reason for OCSP's demise is shorter SSL/TLS certificate life, so they expire rather than needing to the revoked. From 15th March 2026, certificate life span is reduced to 200 days, from 15th March 2027 down to 100 days and finally from 15th March 2029 to 47 days, but only 10 days for domain control validated certificates, such as most free certificates which are currently 90 days maximum. ICS can already order seven day certificates from Google Trust Services, with Let's Encrypt adding this later in 2025. 20 - ICS now defaults to the latest OpenSSL version 3.5.2 which includes support for new Post Quantum Cryptography (PQC) algorithms (ML-KEM, ML-DSA and SLH-DSA) and for server side QUIC (RFC 9000). ICS has no plans for QUIC support, not yet investigated PQC, don't believe any low level changes are needed, maybe changes to the cipher lists. This is a long term support release with fixes and security updates for five years, until April 2030. ICS still includes four older OpenSSL versions, which will slowly disappear as they reach end of life, about one every six months. 21 - The OverbyteIcsDefs.inc file included in most ICS units has several new defines. DEFINE OpenSSL_36 (due Oct 2025) and OpenSSL_40 (due Apr 2026). Enabled DEFINE OpenSSL_35 for OpenSSL 3.5. DEFINE OpenSSL_OcspStaple, should SSL server staple an OCSP response to check if server certificate is revoked. Let's Encrypt stopped adding an OCSP URL to certificates in May 2025 so only enable this if using authorities that still support OCSPL, to avoid extra code being linked. DEFINE OpenSSL_OcspChains, should SSL clients checking a certificate chain check an OCSP server to see if the certificate is revoked, only happens if the certificate has an OCSP URL, undefine to remove the extra code that does OCSP checks. DEFINE OpenSSL_Deprecated, should OpenSSL deprecated functions be loaded, not needed for ICS but may be used by applications for encryption or signing. DEFINE USE_IcsGeoTools used by samples with the TIcsGeoTools component to lookup countries from IP addresses, D11 and later only. All ICS active samples are available as prebuilt executables, to allow ease of testing without needing to install ICS and build them all. There are four separate zip files split into clients, servers, tools and miscellaneous samples which can be downloaded from https://wiki.overbyte.eu/wiki/index.php/ICS_Samples
-
eSeGeCe Software is proud to announce full support for the WebAuthn protocol in the latest release of sgcWebSockets Enterprise, bringing seamless and secure passwordless authentication to your Delphi and C++Builder applications. WebAuthn (Web Authentication API) is a web standard published by the W3C and FIDO Alliance. It allows servers to register and authenticate users using public key cryptography instead of passwords. Users can sign in using biometrics like fingerprint, security keys, or device-based passkeys — offering stronger security and a smoother user experience. The Enterprise Edition of sgcWebSockets now includes support for WebAuthn on server side: 100% Delphi code without using external libraries (except the openssl 3 libraries that are required for signing, encryption and validation). WebAuthn Registration and Authentication flow (create and verify credentials). Support for passkeys on compatible devices. Communication over both HTTP and WebSocket protocols. Integration-ready JavaScript client library for use in modern web browsers. Server-side component: TsgcWSAPIServer_WebAuthn. Full control over WebAuthn MDS, Authorization, and Custom Policies. Support for the following Algorithms: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512, RS1, EdDSA. With this update, developers can now leverage secure, passwordless login workflows in real-time web applications, all while maintaining the performance and flexibility that sgcWebSockets package is known for. Online Demo: https://www.esegece.com:2053/sgcWebAuthn.html Compiled Demo: https://www.esegece.com/download/protocols/sgcWebAuthn.zip Trial Version: https://www.esegece.com/websockets/download/download-delphi-cbuilder More Info: TsgcWSAPIServer_WebAuthn Server Authorization using Passkeys https://www.esegece.com/websockets
-
ANN: WebAuthn Support in sgcWebSockets Enterprise
esegece replied to esegece's topic in Delphi Third-Party
I'm proud to announce that the sgcWebSockets WebAuthn Server has successfully passed all conformance tests using the official FIDO Conformance Test Tool. https://www.esegece.com/community/blog/fido-conformance-tools-sgcwebsockets -
ai coding MCP server to catch windows debug messages
Kas Ob. replied to Javier Tarí's topic in General Help
Here is a simple console app that extract exports from a DLL, this is needed to confirm compatibility or if adjustment is needed to make the Compiler/IDE message hook working on newer IDEs than mine. If the function is still there with the same signature (declaration) or similar then it will work, also if it is the same then that means it will work for all IDE newer than XE8. Please, run the following console app, and dump the coreideXXX.bpl exports, and either pack the compress the whole output and attach it here, or just if there is the following or similar procedures @Msglines@TCompilerMsgLine@ @Msglines@TCompilerMsgLine@$bctr$qqr17Compintf@TMsgKindix20System@UnicodeStringiit3t3ox53System@%DelphiInterface$26Msglinesintf@IMessageGroup% @Msglines@TCompilerMsgLine@Draw$qqrp20Vcl@Graphics@TCanvasrx18System@Types@TRecto @Msglines@TCompilerMsgLine@GetLineText$qqrv They are together, and might different after "@Msglines@TCompilerMsgLine@" but that what i need to decode and solve in case there is difference, the above are form coreide220.bpl (XE8) the original code of dumping/getting exports from DLL is by David Heffernan https://stackoverflow.com/questions/31917322/how-to-get-all-the-exported-functions-in-a-dll program DllExportDumper; {$APPTYPE CONSOLE} uses SysUtils, Classes, Windows; // original code by David Heffernan from SO, modified to run in 64bit and support 64bit DLLs // https://stackoverflow.com/questions/31917322/how-to-get-all-the-exported-functions-in-a-dll function ImageNtHeader(Base: Pointer): Pointer; stdcall; external 'dbghelp.dll'; function ImageRvaToVa(NtHeaders: Pointer; Base: Pointer; Rva: ULONG; LastRvaSection: Pointer): Pointer; stdcall; external 'dbghelp.dll'; function EnumerateImageExportedFunctionNames(const ImageName: string; NamesList: TStrings): Boolean; const IMAGE_FILE_MACHINE_AMD64 = $8664; type PIMAGE_NT_HEADERSEX = ^IMAGE_NT_HEADERSEX; IMAGE_NT_HEADERSEX = record Signature: DWORD; FileHeader: IMAGE_FILE_HEADER; {$IFNDEF FPC}{$IF CompilerVersion >= 24.0 } {$LEGACYIFEND ON} {$IFEND}{$ENDIF} {$IF not Declared(IMAGE_OPTIONAL_HEADER64)} OptionalHeader: IMAGE_OPTIONAL_HEADER; {$ELSE} OptionalHeader: IMAGE_OPTIONAL_HEADER32; {$IFEND} end; var i: Integer; FileHandle: THandle; ImageHandle: THandle; ImagePointer: Pointer; NtHeader: Pointer; HeaderEx: PIMAGE_NT_HEADERSEX; // trick to slide by 16 instead of defining record for both 32bit and 64bit, support many compilers ExportTable: ^_IMAGE_EXPORT_DIRECTORY; NamesPtr: PULONG; NamePtr: PAnsiChar; Is64Bit: Boolean; begin Result := False; NamesList.Clear; FileHandle := CreateFile(PChar(ImageName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if FileHandle = INVALID_HANDLE_VALUE then Exit; try ImageHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil); if ImageHandle = 0 then Exit; try ImagePointer := MapViewOfFile(ImageHandle, FILE_MAP_READ, 0, 0, 0); if not Assigned(ImagePointer) then Exit; try NtHeader := ImageNtHeader(ImagePointer); if not Assigned(NtHeader) or (PIMAGE_NT_HEADERSEX(NtHeader)^.Signature <> $00004550) then Exit; Is64Bit := PIMAGE_NT_HEADERSEX(NtHeader)^.FileHeader.Machine = IMAGE_FILE_MACHINE_AMD64; if Is64Bit then // slide by 16 byte for 64bit HeaderEx := PIMAGE_NT_HEADERSEX(NativeUInt(NtHeader) + 16) else HeaderEx := PIMAGE_NT_HEADERSEX(NtHeader); ExportTable := ImageRvaToVa(NtHeader, ImagePointer, HeaderEx^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress, nil); if not Assigned(ExportTable) or (ExportTable^.NumberOfNames = 0) or (ExportTable^.NumberOfNames > 1000000) or (Cardinal(ExportTable^.AddressOfNames) = 0) then Exit; NamesPtr := ImageRvaToVa(NtHeader, ImagePointer, Cardinal(ExportTable^.AddressOfNames), nil); if not Assigned(NamesPtr) then Exit; for i := 0 to ExportTable^.NumberOfNames - 1 do begin if NamesPtr^ = 0 then Exit; NamePtr := ImageRvaToVa(NtHeader, ImagePointer, NamesPtr^, nil); if not Assigned(NamePtr) then Exit; NamesList.Add(string(NamePtr)); inc(NamesPtr); end; Result := True; finally UnmapViewOfFile(ImagePointer); end; finally CloseHandle(ImageHandle); end; finally CloseHandle(FileHandle); end; end; procedure DumpDllExports(const FileName, OutputPath: string); var ExportsList: TStringList; OutputFileName: string; begin ExportsList := TStringList.Create; try if EnumerateImageExportedFunctionNames(FileName, ExportsList) then begin Writeln('Exports API found: ', ExportsList.Count); Writeln('Saving exports for ', FileName); OutputFileName := IncludeTrailingPathDelimiter(OutputPath) + ExtractFileName(FileName) + '.txt'; ExportsList.SaveToFile(OutputFileName); Writeln('File saved -> ', OutputFileName); end else Writeln('No exports found or parsing failed for ', FileName); finally ExportsList.Free; end; end; begin try DumpDllExports('D:\Program Files (x86)\Embarcadero\Studio\16.0\bin\coreide220.bpl', GetCurrentDir); DumpDllExports('C:\Windows\System32\d3dx10_33.dll', GetCurrentDir); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. For this exact two dlls on my device the coreide220.bpl return more than 22k exports, while that direct3d library return only 177.- 9 replies
-
- ai
- claude code
-
(and 2 more)
Tagged with:
-
New YAML Parser Library - VSoft.YAML
Vincent Parrett replied to Vincent Parrett's topic in I made this
No - but it's a nice idea - In theory it wouldn't too difficult to do. Of the top of my head, would need to maintain a stack of IInputReader and then when encountering an include tag oush the current reader and open a reader on the referenced file, when that reader is eof, pop a reader from the stack and continue. I don't have a need for that right now but I'm open to a pull request to implement it 😉 -
The purported disadvantage of NxHorizon needing more boilerplate code can be mitigated somewhat if you have the AI write the boilerplate.
-
GExperts tries very hard, but is not perfect. The same for Breakpoints. I updated that code "recently" (a year ago?) so it became a lot better, but still not perfect.
-
A simple Code Editor trick to quickly jump to predefined locations in a huge unit
PeterPanettone replied to PeterPanettone's topic in General Help
CnWizards is a very helpful Delphi IDE plugin with many useful features, among them the above-mentioned F3 SEARCH feature: https://www.cnpack.org/index.php?lang=en Here is the option to activate this feature: -
A simple Code Editor trick to quickly jump to predefined locations in a huge unit
PeterPanettone replied to PeterPanettone's topic in General Help
I've found it: F3 automatically searches the next occurrence of the selected text only if CnWizards is installed. I've tested it by unloading CnWizards. When CnWizards is not loaded, then F3 on the selected text displays this message: And then, when clicking the "Yes" button after having checked "Wrap around without asking", this message is displayed: This could be a bug in the Delphi IDE that CnWizards resolves. -
@Oboba I didn't say that Win32 IDE, with which you can produce x86 EXE, will be abandoned in a near time. As I said (or better Embarcadero said), the 32-bit IDE will still be maintained, so you will not have any issue.
-
And here we go: An installer for the Beta version of GExperts for Delphi 13: See the blog post.
-
Execution time difference between 32b and 64b, using static arrays
Stefan Glienke replied to lg17's topic in General Help
It looks like whoever implemented that in the Delphi compiler was overly obsessed with codesize. If you compare what both gcc and clang do you can see that they rather produce a ton of mov instructions (which execute nicely in parallel on modern processors) before using memmov or rep: https://godbolt.org/z/Gjsqn7qas (change the size of the static array to see the assembly code change)