The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • Home
  • Wiert.me
  • About the Wiert Corner
  • Privacy Policy
  • Conferences, seminars and other public appearances
  • Posting categories
  • Archives
  • Toolbox
  • Contact form
  • License
  • Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.

    To find out more, including how to control cookies, see here: Cookie Policy
  • Subscribe

    • Entries (RSS)
    • Comments (RSS)
  • November 2026
    M T W T F S S
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30  
    « Oct    
  • Archives

    • November 2026 (12)
    • October 2026 (46)
    • September 2026 (45)
    • August 2026 (42)
    • July 2026 (46)
    • June 2026 (46)
    • May 2026 (42)
    • April 2026 (45)
    • March 2026 (45)
    • February 2026 (47)
    • January 2026 (48)
    • December 2025 (54)
    • November 2025 (47)
    • October 2025 (50)
    • September 2025 (49)
    • August 2025 (47)
    • July 2025 (50)
    • June 2025 (47)
    • May 2025 (48)
    • April 2025 (46)
    • March 2025 (44)
    • February 2025 (48)
    • January 2025 (55)
    • December 2024 (48)
    • November 2024 (44)
    • October 2024 (51)
    • September 2024 (46)
    • August 2024 (53)
    • July 2024 (50)
    • June 2024 (36)
    • May 2024 (33)
    • April 2024 (33)
    • March 2024 (36)
    • February 2024 (28)
    • January 2024 (28)
    • December 2023 (27)
    • November 2023 (24)
    • October 2023 (24)
    • September 2023 (29)
    • August 2023 (31)
    • July 2023 (33)
    • June 2023 (26)
    • May 2023 (26)
    • April 2023 (31)
    • March 2023 (26)
    • February 2023 (27)
    • January 2023 (24)
    • December 2022 (33)
    • November 2022 (27)
    • October 2022 (23)
    • September 2022 (25)
    • August 2022 (24)
    • July 2022 (26)
    • June 2022 (26)
    • May 2022 (23)
    • April 2022 (32)
    • March 2022 (69)
    • February 2022 (63)
    • January 2022 (66)
    • December 2021 (75)
    • November 2021 (66)
    • October 2021 (64)
    • September 2021 (67)
    • August 2021 (69)
    • July 2021 (69)
    • June 2021 (69)
    • May 2021 (68)
    • April 2021 (67)
    • March 2021 (72)
    • February 2021 (63)
    • January 2021 (65)
    • December 2020 (70)
    • November 2020 (64)
    • October 2020 (68)
    • September 2020 (67)
    • August 2020 (67)
    • July 2020 (71)
    • June 2020 (68)
    • May 2020 (64)
    • April 2020 (67)
    • March 2020 (70)
    • February 2020 (61)
    • January 2020 (74)
    • December 2019 (70)
    • November 2019 (63)
    • October 2019 (73)
    • September 2019 (68)
    • August 2019 (66)
    • July 2019 (68)
    • June 2019 (68)
    • May 2019 (72)
    • April 2019 (73)
    • March 2019 (64)
    • February 2019 (68)
    • January 2019 (78)
    • December 2018 (87)
    • November 2018 (77)
    • October 2018 (79)
    • September 2018 (77)
    • August 2018 (76)
    • July 2018 (74)
    • June 2018 (63)
    • May 2018 (70)
    • April 2018 (63)
    • March 2018 (72)
    • February 2018 (48)
    • January 2018 (83)
    • December 2017 (67)
    • November 2017 (62)
    • October 2017 (63)
    • September 2017 (52)
    • August 2017 (62)
    • July 2017 (48)
    • June 2017 (57)
    • May 2017 (68)
    • April 2017 (55)
    • March 2017 (59)
    • February 2017 (58)
    • January 2017 (60)
    • December 2016 (59)
    • November 2016 (74)
    • October 2016 (61)
    • September 2016 (87)
    • August 2016 (57)
    • July 2016 (51)
    • June 2016 (49)
    • May 2016 (48)
    • April 2016 (51)
    • March 2016 (49)
    • February 2016 (50)
    • January 2016 (48)
    • December 2015 (59)
    • November 2015 (57)
    • October 2015 (37)
    • September 2015 (31)
    • August 2015 (41)
    • July 2015 (31)
    • June 2015 (37)
    • May 2015 (30)
    • April 2015 (32)
    • March 2015 (37)
    • February 2015 (52)
    • January 2015 (50)
    • December 2014 (43)
    • November 2014 (39)
    • October 2014 (40)
    • September 2014 (41)
    • August 2014 (58)
    • July 2014 (32)
    • June 2014 (23)
    • May 2014 (38)
    • April 2014 (105)
    • March 2014 (145)
    • February 2014 (81)
    • January 2014 (56)
    • December 2013 (58)
    • November 2013 (32)
    • October 2013 (26)
    • September 2013 (26)
    • August 2013 (54)
    • July 2013 (47)
    • June 2013 (41)
    • May 2013 (33)
    • April 2013 (41)
    • March 2013 (50)
    • February 2013 (47)
    • January 2013 (55)
    • December 2012 (32)
    • November 2012 (23)
    • October 2012 (37)
    • September 2012 (52)
    • August 2012 (46)
    • July 2012 (40)
    • June 2012 (30)
    • May 2012 (27)
    • April 2012 (30)
    • March 2012 (29)
    • February 2012 (32)
    • January 2012 (25)
    • December 2011 (38)
    • November 2011 (28)
    • October 2011 (46)
    • September 2011 (63)
    • August 2011 (35)
    • July 2011 (24)
    • June 2011 (24)
    • May 2011 (24)
    • April 2011 (29)
    • March 2011 (50)
    • February 2011 (48)
    • January 2011 (18)
    • December 2010 (5)
    • November 2010 (18)
    • October 2010 (22)
    • September 2010 (29)
    • August 2010 (24)
    • July 2010 (27)
    • June 2010 (29)
    • May 2010 (25)
    • April 2010 (23)
    • March 2010 (10)
    • February 2010 (6)
    • January 2010 (16)
    • December 2009 (12)
    • November 2009 (3)
    • October 2009 (11)
    • September 2009 (21)
    • August 2009 (11)
    • July 2009 (11)
    • June 2009 (5)
    • May 2009 (12)
    • April 2009 (20)
  • Category Cloud

    *nix *nix-tools .NET About Apple C# Conferences Conference Topics Delphi Development Event Google Hardware Hardware Development History Internet LifeHacker Linux Mac OS X / OS X / MacOS Personal Power User Scripting Security SocialMedia Software Development Source Code Management VMware Web Development Windows Windows 7
  • Recent Comments

    jpluimers's avatarjpluimers on C13/C14 wiring diagram live/ne…
    jpluimers's avatarjpluimers on C13/C14 wiring diagram live/ne…
    #2 on Forensics: Automating Active D…
    A/V Revolution on Link archive: A YouTube video…
    #omdenken on Post by @lookitup.baby (Ian Co…
  • Recent Posts

    • Some notes on finding a USB-C dock for my MacBook Pro M1 Max with multiple USB-C / Thunderbolt monitor outputs
    • Afschepen as a Service – Tilaa
    • Finally Someone Did What Apple Couldn’t… – YouTube
    • Old domains, especially defunct “secure” file sharing servies, are a risk (and a red team vector)
    • Cleaning <!– wp:* comment elements from the WordPress Gutenberg editor
  • Blog Stats

    • 3,761,591 hits
  • Meta title

    • Log in
    • Entries feed
    • Comments feed
    • WordPress.org
  • Tag Cloud Title

    .NET Framework 000000 0000ff 1 2 2 factor authentication 3 3d 3dprint 3dprinting 3m 4 4K Monitor 4K Ultra HD 5 6 7 7z 7zip 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 23a 24 24 hours 25 26 27 29 30th Anniversary Edition 32 35 37 42 48 52 55 61 73 75 76 000080 88 91 96 101 103 128 138 143 156 159 162 172 195 205 218 233 237 254 258 305 309 325 339 374 379 394 425 561 594 600 640 738 763 768 769 787 938 981 1010 1018 1029 1054 1509 1644 1656 1686 1779 1915 1971 2020 2021 2023 2062 2084 2100 2141 2142 2209 2502 2767 2850 2852 2977 3042 3277 4261 4640 4689 5053 5155 5531 6493 7473 7476 008000 008080 8846 11078 11281 12306 13296 15073 17427 18365 19100 21771 21962 22537 22728 23311 25827 27651 32392 33188 35690 36566 44201 46843 48558 48559 51505 97720 97790 100422 3088938 a11y accessibility access violation account settings acpi Adest Musica administrative privileges adobe font adobe software adt AI AirBnB airline alliances Alexandre GOUAILLARD Allen Bauer AllesIstKaput american inventor amstelland analyser android Android emulator Android SDK AndroidSystemSafetyCore annual report antarctic region Apple appleii appleiigs apple macbook Apple Support Communities apple technology application version Appril april 1st AprilApples architecture art arts assembler version assembly instructions assembly language astronaut asus attendees audio codec audio fragment august 1st autogas aviation Avondshow babyfur backslash banks bassdrum batch file batch files battery life bbc news BBC Radio 4 Extra bigdata bitbucket BLM blog blog entry blogging blong bmp file bmw bmwe60 bmwe61 bmwtips bollenstreek booking flights borland borland C++ borstkanker bot broderbund browser vendor bufferbloat Buffer Overflow bugs BuiltOnAspNetCore burgernet business business passengers ByeAmazon c7 C64 ca certificate ca certificates Caps Lock cars cat5e c builder certificate authority CES2025 change ChatGPT cheat code checkm8 Chromebook Classic Typewriters climate Cloudflare clustercomputing cnet reviews cng stations code monkey coeffects colour distribution colour palettes comedy comics command-line commandline arguments command line tools Commodore Commodore64 comparison operators component market compressed natural gas computer computer history museum computer network computing computing hardware conclusion Conferences ConfigParser Consumerist cornucopia Covid CovidIsNotOver CppBuilder CPU usage CPU utilization cray documentation cray machines CreativeCoding cross platform c runtime library crying csharp CSS syntax elements c style ctrl c cURL cybergangster CyberSecurity cyberwarrior dak Darkmeta data binding datacenter date formats David M Williams day trips ddns Debugging DEC DeepSeek default gateway default routes DEFCON30 define de jager delegate Delphi delphi 1 delphi 5 delphi 6 delphi applications Delphi book delphi code Delphi Component Design delphi conferences Delphi Cookbook delphi developers delphi ide delphi language Delphi Pipe delphi team delphi tips Delphi TParser Delphi versions DelphiWeek dementie Democracy denial of service attack departure airport departure date Deployment Manager design design time desktop apps desktop environment desktop interface deuren DevDays09 developer development environment DevOps DFIR Dilbert dinvoke disaster recovery plan div DIY DMARC DNS documentation domains domain validation dos vulnerability dotnet dotnetcore doug engelbart douglas engelbart download delphi Draw! drawing drive bays drive mapping DropBox dsl adsl duet duurzaamheid dynamic dns service düsseldorf germany early november ECC RAM eco system edge data edit editor buffer editors education eerlijkecloud eham ekon EKON20 electronic invoices electronics elektronica else email provider embarcadero EMERGENCY mode empty parameter endif endregion energy density engineering engineering team english versions enterprise-it environment environment variables error 500 error messages excerpt excessive CPU usage execcommand executionPlan exercism exitscam expired certificate ExploratoryTesting f5f8fa facebook fake certificates FBPE Feedly ff0000 ffffff fiber Fiddler file formats financial domain find fingers finger touch firmware updates firstpost flickr flight duration floppydiskfriday fmx focus folder structure foley font design fonts forum gps foryou foryoupage free chapters Free Pascal FreePascal free starter free WiFi french english translations fritz box full name full script text funny fyp gadgets gaming garmin geekporn geeks germany austria germany switzerland GExperts gigabyte GitHub GitLab glasvezel glenn crouch gmail gmail account GnuTLS google Google Authenticator google cache GoogleCloudFunctions Google Hangouts google images google maps google search goto cleanup GoToWebinar gps devices graph greatscott great stuff hacking hamradio Hangouts Hangouts Dialer happy new year hard drive hardlinks hardware version hardware versions hash collision hashtable hd HDD hdds hdpe Heartbleed heidelberg germany helper monkeys HelpMessages hetsyndroomvanmoeje hex key hidden files hidden gems hinvoke Hitachi drives hittegolf homelab Hosting hotel business hotfixes houd HPC HTML HEAD tag huissen human interface guidelines iata airport codes ibm websphere mq ICC ide ideas if ikea imperial units include inclusion inclusive inconvenience index names Infocom infosec innovation innovatorsplus integration system intel intel 8086 intel assembly Intel Communities Intel HD graphics intel mcs InterBase interface types internet internet explorer patch internet explorer versions internet rfc investering iOS iOS6 iOS development ip address change iphone iphone 5 iso 8601 iso calendar ISupportExercism James Friend java jre java runtime environment java script code java security java updates java version java vulnerability jeroen JFokus jitter JSON julian Junction Points kennemerland keyboard keyboard layout keyboard shortcuts kg Kieswijzer kpn4all Kristian Köhntopp lame landmarks language reference guide latency LaTeX laughedanyway layout engine left pane leiden leidsch dagblad Length function lenovo thinkpad light blue touchpaper line breaks Linux liquefied petroleum gas listeners Logical operators logitech mouse lowest fare m3u Mac macbook MacDrive Mac emulator machine hardware macintosh developers mac os x mac programmer mac rumors maintenance releases major features maldev map map drive Maps marc hoffman MarkDown marketing Mashable meaningful name measurement units Media megabytes member search member type Meme memoryforensics memory manager memory managers memory modules memprocfs Mercurial meshcore message box messages metric Metropolis Michael Panzer micro focus micron technology inc microsoft microsoft com downloads microsoft office microsoft office online microsoft patches microsoft security bulletin microsoft surface microsoft windows mid 1980s migration MikroTik Milan Linate airport mobile modula 2 mono mp4 msbuild Multi-Device munten Music nasm nat friedman nature NeoSmart nerdjoke netneutraliteit networkbasics network connections networking networks networks4hackers Neuland new features new java new option NewProfilePic newyear new year Nick Butcher nick hodges nicolette nikkor nikon nintendo nes nl nmap noodkanaal notebook hdd notifications NPPSPY NTFS NTFS file system NTLM authentication ObjectPascal object pascal object windows library ocw odd office excel office microsoft Oma Omdenken opensource open source openSUSE OpenWRT operator overloading opus OS os x OS X 10.8 Mountain Lion OSXDaily outdoors oververhitting owc Oxygene Packt paper bins paradise Paragon NTFS ParodyMusicVideo party software pascal path names pcb pc computing PCE pc hardware pcx pdf pentest Pentesting percussion perl phone photography physical ram pingbot plastic playlists Play Services pleonasm pls Polizeiakademie possible power button PowerShell ppp precaution preferred airline preferred airlines presentations Privacy Productivity product portfolio professional edition ProgrammerHumor programmers guide Protagio Pro Tips proudof public appearances Push notifications Python query quest mode quotes radiation therapy RADStudio rangers RareAesthetic RaspberryPi ray lischner ready to assemble furniture real world reboot recommended reading Recovery Pending redteam region regression regular expressions reimtsich relative paths Reload remap Rene Larsen repair repositories research result results resultSets retina retro retrogaming right tools ring tone room key route change route print RouterOS routers rpi rsync rtl nieuws Ruby run samsung sarcasme sas scheduling schulenansnetz science scott hanselman screw script secure software security alert security fixes securitynl Select selfhost SepTandy serverbuilds Server Fault set severity rating shareholder shellacces shorts Showband Adest Musica shutdown button SIM cards site sizes smartphones Smurfwijzer snapshots snippets Sn_blackmeta Sn_darkmeta social-media software software company software development software engineering software glitches software products soldaat van oranje sound soundeffects sourcecode language sourceforge Southport Spaces speed improvement spread knowledge SQL SQLite SQL Server SQL Server 2012 SQL Server Management Studio 2012 ssd ssd drives ssl certificate ssl connections stablediffusion stack overflow stat StaySafe stem Stemwijzer streams subnetting summer holiday SUSE sweet spot switch symbolic links system preferences system shutdown T-Mobile USA tb Tech Blast TechCrunch technology teleconverter telfort temporal compatibility terminal emulator terminal session test text The Hitchhiker's Guide to the Galaxy the Boot Camp Support Software thinkpad this ThisIsWhyWeCantHaveNiceThings thread work tierney timeline timer resolution tiny tips tips and tricks TK2023 TK2025 TLS todays software toegankelijkheid toner tool Toshiba touch monitor touch windows transportation Travel Travel More Efficient tray menu truckrun TTY turbo assembler turbo pascal 6 Turbo Pascal era tutor twitter Typography tyvek envelopes ui Ukraine ultimate hack UniDAC unique visitors unproductive days Update Installation url usb3 USBArmyKnife user interface UXdesign VALUE VAXXED vcl Verkiezingen Verkiezingen2023 verona italy version compatibility version number vertical lines vintagecomputing vintagegaming viral virtual disk virtual hardware virtualization virtual machine virtual machines virtual machine systems VLB vm vms VMware VMware Fusion VMware Workstation vr Warren Postma web browsers web editors web fonts webm Welcome2021 wget wget speedfan WhyCantWeHaveNiceThings WIDM wieisdemol wieisdemol2025 WiFi wikipedia Wil van Kesteren windows controls Windows keyboard windows keyboard shortcuts windows phone Windows Server 2003 R2 windows shortcuts Windows Update Windows XP Windows XP SP2 wonderful magazine wordpress workout x86 processors XE8 xkcd XML xs4all Yahoo Yahoo Pipes Zeer bedroefd hebben wij kennis genomen van het overlijden van Oma Wil van Kesteren zero day zero results ZFS zookeepers
  • Top Clicks

    • docs.broadcom.com/docs-an…
    • www-01.ibm.com/support/do…
    • somoit.net/windows/window…
    • newsgroups.codegear.com/t…
    • codeverge.com/public.delp…
    • cdn.shopify.com/s/files/1…
    • i0.wp.com/web.archive.org…
    • jeffgeerling.com/blog/202…
    • age-of-product.com/28-pro…
    • ui.com/download/releases/…
  • Top Posts

    • Delphi: you should avoid the `with` statement as it makes your code less future proof
    • Delphi - for ... in on enumerated data types
    • Delphi: do not do “if (not DirectoryExists(path)) then ForceDirectories(path))”
    • Downgrading to SourceTree 1.5.x from 1.6.x, but keeping up with the youngest embedded Git and Mercurial
    • Delphi: `with` dos and dont's (more of the latter though).
    • Delphi - MD5: the MessageDigest_5 unit has been there since Delphi 2007
    • Google Calendar - printing multiple months or weeks to PDF - URL parameter tips and tricks
    • Delphi: updating a (potentially non-existing) item in a generic TDictionary: use ExtractPair. Except in Delphi 2010/XE.
    • Windows XP: changing the HAL to support multiple cores (actually: two CPUs)
    • Delphi - FastMM: Using FastMM4 for debugging your memory allocations - part 1: Introduction
  • My badges

    Mastodon
  • Twitter Updates

    Tweets by jpluimers
  • My Flickr Stream

    20140508-Delphi-2007--Project-Options--Cannot-Edit-Application-Title-HelpFile-Icon-Theming20140430-Fiddler-Filter-Actions-Button-Run-Filterset-now20140424-VMware-Fusion-6.0.3.-no-reclaimable
    More Photos
  • Pages

    • About the Wiert Corner
      • bio
      • Music I like
    • Archives
    • Conferences, seminars and other public appearances
    • Contact form
    • License
    • Posting categories
    • Privacy Policy
    • Toolbox
      • DNS
      • Links
      • spring4d
      • Status
    • Wiert.me
  • All categories

  • Email Subscription

    Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 717 other subscribers

Archive for the ‘Delphi 5’ Category

« Previous Entries

Just released: the 2025 Annotated Edition of Mastering Delphi 5 by Marco Cantù

Posted by jpluimers on 2025/02/14

This just in: [Wayback/Archive] downloads.marcocantu.com/delphi5annotated.pdf

It has close to 200 annotations in some 300 pages plus a new preface, which is also at [Wayback/Archive] Mastering Delphi 5 2025 Annotated Edition

This brings the book current, but also showing how good Delphi is in backward compatibility.

Via:

  1. [Wayback/Archive] Marco Cantù: “Blog post “Mastering Delphi 5 2025 Annotated Edition” at blog.marcocantu.com/blog/2025-fe…” — Bluesky
  2. [Wayback/Archive] marcocantu.com-Books

--jeroen

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 5, Development, Software Development | Leave a Comment »

Howto create C-Header for Delphi/Free Pascal/Lazarus DLL – data types – Stack Overflow

Posted by jpluimers on 2021/09/23

From a long time ago, but got a request for it a while ago is [WayBack/Archive.is] Howto create C-Header for Delphi/Free Pascal/Lazarus DLL – data types – Stack Overflow:

I have used the below construct to generate header files compatible with the C-mode compiler of Visual C++ 6 from Delphi 5 code when Delphi had the -JPH switch (see notes below).
Note that I have not used this since Delphi 5, but the switch has since then been expanded:
Somewhere along the line, the [WayBack] JPHNE switch has been added to the dcc32 command-line compiler:
  -JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all
Rudy Velthuis has a [WayBack] nice article using the JPHNE switch.
It certainly does not handle all types, and you will need quite a bit of [Archive.is] HPPEMIT and [Archive.is] EXTERNALSYM directives.
I uploaded my [Archive.is] Delphi 5 to Visual C++ 6 HPP conversion from back then to BitBucket.
It generates the .hpp files to import the DLL that was written in Delphi.
Notes from the Delphi 5 era:
{ Visual C++ 6 does not like nested structs/unions the way that BC++ can handle them.
  Visual C++ 6 requires the "typedef" to be present AND the typename AFTER the struct definition.
  You will see this when defining TConversationId, TReturnKey and other types that depend on nested structs/unions

  The trick is to perform these steps each and every time this unit changes:
    - Generate this unit once with all the EXTERNALSYM disabled.
      - Then the DCC32 -JPH will generate the basic structs for them.
    - Copy all the nested struct and union definitions to this file
    - Embed the definitions with (*$HPPEMIT '' *)
    - Append the typename at the end of the struct definition
    - Enable all the EXTERNALSYM again
    - Regenerate the HPP files by using DCC32 -JPH
  To make this process easier, we have introduced two new conditional defines:
    - BCB - disable EXTERNALSYM, disable HPPEMIT
    - VC6 - enable EXTERNALSYM, enable HPPEMIT

  A similar thing is with these constructions that VC6 does not like those either:
    - short strings (BCB defines them as "SmallString<##>" which VC6 does not like).
    - short integers (BCB defines them as "Shortint" so we have included an HPPEMIT for that)
}

{$ifdef win32}
  { important! Makes sure that the all enumerated types fit in exactly one byte each! }
  {$Z1}

  { force the C/C++ HPP header files to have the C/C++ compiler pack structure elements on byte boundaries }
  {$ifdef BCB}
    {$HPPEMIT '#pragma option push -a1' }
  {$endif BCB}
{$endif win32}

And the download (hopefully I have converted it to git by then):

The link to the converter is now [Archive.is] bitbucket.org/jeroenp/wiert.me/src/default/Native/… – Delphi Coder

–jeroen

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 5, Development, Software Development | Leave a Comment »

SequoiaView Homepage

Posted by jpluimers on 2019/07/01

I thought I had scheduled a blog post about the great tool on [WayBack] SequoiaView Homepage, but didn’t. In the mean time, Paolo Buffa posted an overview with a really nice historic perspective:

Is amazing from how many years I’m using this program, and how many operating systems it managed to go thru almost unscathed, without modification.

Paolo Buffa

Source: [Archive.is] SequoiaView: a piece of history. – Data Center IT – Spiceworks

I still use it, despite it being quite old: 2002 era, written in Delphi 5. It’s beautiful in part because of its anciency, but also because it is so simple and intuitive that I still use it regularly.

The age also shows in the web page (which when writing it was still on-line): The SequiaView home page link above is actually a classic frame inside [WayBack] The SequoiaView Homepage. Back then, it was already starting to be considered obsolete to write HTML using frameset [WayBack] Framing (World Wide Web) – Wikipedia.

The SequoiaView [WayBack] Download Page even points to non-existing ftp-download URLs via counter CGI scripts:

  • Version 1.2 installer: http://www.win.tue.nl/cgi-bin/usr/sequoia/counter2.cgi -> ftp://ftp.win.tue.nl/pub/home/sequoia/SequoiaInstall.exe
  • Version 1.3 installer: http://www.win.tue.nl/cgi-bin/usr/sequoia/counter3.cgi -> ftp://ftp.win.tue.nl/pub/home/sequoia/Sequoia1_3Install.exe
  • Version 1.3 installer for Windows XP: http://www.win.tue.nl/cgi-bin/usr/sequoia/counter3xp.cgi -> ftp://ftp.win.tue.nl/pub/home/sequoia/Sequoia1_3XPInstall.exe
  • Version 1.3 zipped installer: http://www.win.tue.nl/cgi-bin/usr/sequoia/counter3zip.cgi -> ftp://ftp.win.tue.nl/pub/home/sequoia/Sequoia1.3Install.zip

None of them have been archived by the WayBack machine: https://web.archive.org/web//ftp://ftp.win.tue.nl/pub/home/sequoia//

To verify alternative downloads, just check these hashes:

hash command filename hash output
$ md5 Sequoia1.3Install.zip MD5 (Sequoia1.3Install.zip) = 28d356f2bafe258805794257c284a075
$ md5 Sequoia1_3XPInstall.exe MD5 (Sequoia1_3XPInstall.exe) = 142586a5cc7a0139bde8c13e5cc4d301
$ shasum Sequoia1.3Install.zip 762ab30177a7f6a0d4f173fd2442ba7b61df4c2e Sequoia1.3Install.zip
$ shasum Sequoia1_3XPInstall.exe c1db10a0f7d36adbc14b5a7a3f08fc35db1bee8b Sequoia1_3XPInstall.exe

I’ve a copy in my archive that I just use in a portable way: just copy over SequoiaView directory with these files in it:

  • Archives.col
  • DEFAULT.COL
  • Images.col
  • License.txt
  • Movies.col
  • ReleaseNotes.txt
  • Sequoia.cnt
  • Sequoia.exe
  • SEQUOIA.HLP
  • Sound.col

You can download this from gist.github.com/jpluimers/b0df9c2dba49010454ca6df406bc5f3d (ef94f1875377f4054e3a434f8942e1749f0af74a.zip).

A few things that could be fixed (if ever hopefully MagnaView open sources it: [WayBack] @jpluimers More @magnaview did you ever consider to open source the Delphi code for http://www.win.tue.nl/sequoiaview/ or give someone NDA access to fix some bugs?):

  • Access violation when re-scanning a drive
  • Option to show multiple links to the same physical file
  • Indication of more rights  needed to index a file or directory
  • Better explorer integration (via context menu)

Read the rest of this entry »

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 5, Development, Power User, Software Development, Windows | Leave a Comment »

“Don’t access VCL from a background thread” – how to demo that?

Posted by jpluimers on 2018/07/11

When accessing the VCL from multiple threads at the same time: adopted from ...\DEMOS\THREADS\THRDDEMO.DPR

When accessing the VCL from multiple threads at the same time: adopted from …\DEMOS\THREADS\THRDDEMO.DPR

Great question a while ago:

[WayBack] “Don’t access VCL from a background thread” – how to demo that? – Primož Gabrijelčič – Google+

For me, the ultimate way why not to access the VCL from a background thread is the precursor of the official threads demo that ships from Delphi 2 to Delphi XE6 in ...DEMOS\THREADS\THRDDEMO.DPR. where you’d think the thread isolation would be in ...DEMOS\THREADS\ThSort.pas but actually is in ...DEMOS\THREADS\SortThds.pas.

The first public showing of that demo did not include main thread protection. It originates from a session at the the 1995 Borland Developers Conference where Ray Konopka showed the below code from Bob Ainsbury.

That session reminded why this joke [WayBack] Via the EKON20 sessions… – Jeroen Wiert Pluimers – Google+ was so funny:  “When Ray Konopka enters the room you have a Raize condition.“.

The question above also made me find back this reference to BorCon95 in San Diego:

Read the rest of this entry »

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 10.2 Tokyo (Godzilla), Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi 8, Delphi x64, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »

Delphi: playing Chimes.wav as an external file or embedded WAVE resource in Delphi XE5.

Posted by jpluimers on 2018/01/10

As a by-effect, this article seems to one of the few that shows where Delphi uses the .dres file extension introduced around Delphi XE.

Recently I had to play some notification sounds in a Windows Delphi application where the application deployment should be as easy as possible: preferable copying the EXE around.

Playing a sound file seems easy, especially if it is a [WayBack] WAV file: just use the [WayBack] PlaySound or the (older) [WayBack] sndPlaySound API functions.

But if you start searching on the internet, you see lots of curious implementations for playing WAV resources through sndPlaySound.

The actual implementation is really really easy though, just make sure you follow the steps right and nothing can go wrong.

[WayBack] The full source code is on my BeSharp.net repository, here is how to to it step by step:

The steps depend on the MMSystem unit, so most of the code translates back to [WayBack] Turbo Pascal for Windows (yes, the 16-bit Pascal days when the MMSystem unit was introduced) with the exception of the SND_SENTRY flag.

The thing that more recent Delphi versions made a lot easier is embedding WAV files as WAVE resources, more on that further on. Read the rest of this entry »

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Borland Pascal, Delphi, Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Development, Pascal, Software Development, Turbo Pascal | Leave a Comment »

MarcoDelphiBooks on GitHub

Posted by jpluimers on 2017/07/04

Just in case I need any of them: now in chronological order.

MarcoDelphiBooks – http://www.marcocantu.com

  • ObjectPascalHandbook
  • MasteringDelphi3
  • MasteringDelphi4
  • MasteringDelphi5
  • MasteringDelphi6 
  • MasteringDelphi7
  • MasteringDelphi2005
  • Delphi2007Handbook
  • Delphi2009Handbook
  • Delphi2010Handbook
  • DelphiXEHandbook

Source: MarcoDelphiBooks

–jeroen

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 2005, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Development, Software Development | Leave a Comment »

Delphi multithreading – AcquireExceptionObject/ReleaseExceptionObject to pass exception from one thread to another thread – via G+ and Stack Overflow

Posted by jpluimers on 2017/02/07

A long time ago, Thomas Mueller (dummzeuch) – Google+ reminded [WayBack] me of this which I required a short while ago:

You can use AcquireExceptionObject():

AcquireExceptionObject returns a pointer to the current exception object and prevents the exception object from being deallocated when the current exception handler exits.

Then you can send the pointer to another thread and if you raise it there it will be freed for you, otherwise you must call ReleaseExceptionObject() to free it.

After the answer by Remy Lebeau [WayBack] and Remko [WayBack] is a comment [WayBack] by mghie [WayBack] that mentions AsyncCalls.pas that now is available on GitHub [WayBack].

If you have a very old (version <= 5) Delphi or just want to look at how AcquireExceptionObject [WayBack] looks like just look at a similar implementation there [WayBack]. Note that instead of the ReleaseExceptionObject [WayBack] call, AsyncCalls re-raises the exception [WayBack].

–jeroen

 

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2007, Delphi 2009, Delphi 2010, Delphi 5, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

Ken Thompson – quotes – Reflections on Trust

Posted by jpluimers on 2016/12/21

Some of the [Wayback] Ken Thompson – Wikiquote entries come from a great [Wayback] 1983 ACM Turing Award Acceptance Lecture [Wayback] “Reflections on Trusting Trust”.

That lecture used to be on http://cm.bell-labs.com/who/ken/trust.html

But it isn’t, and was not in the WayBack machine and neither in the Google Cache [Archive.is] because of the [Wayback/Archive.is] robots.txt. Historic link rot galore!

Edit 20210728: by now it is in the Wayback machine again; the earliest archived copy is from 2001, it also shows that as of april 2015 it is gone from the bell labs server.

The lecture is about [Wayback] compiler viruses and viruses actually did this at least a few times: Wayback: Delphi in 2009 and to [Wayback] XCode in 2015.

A few nice links from [Wayback] ACM Classic: Reflections on Trusting Trust – Google Groups though:

  • [Wayback] Countering “Trusting Trust” – Schneier on Security.
  • [Wayback] Fully Countering Trusting Trust through Diverse Double-Compiling (DDC) – Countering Trojan Horse attacks on Compilers.
  • [Wayback] The Ken Thompson Hack.

And archived versions of (I hope accurate) copies of the article:

  • [Wayback] Cryptography, Security, and Privacy (CrySP) | SCS | UW at the University of Waterloo has it online and archived.
  • [Wayback] ouah.org has it online and archived too.

Finally I found a PDF copy of the original ACM prints that Greg Ganger of Electrical and Computer Engineering at Carnegie Mellon University has online. It’s archived too.

–jeroen

Further reading:

  • (Gone with G+) Really neat concept by Ken Thompson that I read about many years ago. Embed a virus into a compiler that infects any compilers that it compiles, thus… – Koushik Dutta (Koush) – Google+
  • [Wayback] Strange Loops: Ken Thompson and the Self-referencing C Compiler – Good Math, Bad Math.
  • [Wayback] linux – Is Ken Thompson’s compiler hack still a threat? – Programmers Stack Exchange.
  • Wayback: Virus infects development environment – News – The H Security: News and features.
  • [Wayback] Compiler virus infects thousands of programs.
  • [Wayback] Compile-a-virus – W32/Induc-A | Naked Security.
  • [Wayback] Novel Malware XcodeGhost Modifies Xcode, Infects Apple iOS Apps and Hits App Store – Palo Alto Networks BlogPalo Alto Networks Blog.

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in *nix, Conference Topics, Conferences, Delphi, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Development, Event, Fun, Internet, link rot, Power User, Quotes, Software Development, T-Shirt quotes, WWW - the World Wide Web of information, xCode/Mac/iPad/iPhone/iOS/cocoa | Leave a Comment »

The curse of the Project.res file.

Posted by jpluimers on 2016/11/29

A long time ago, Lars Fosdal wrote this on the Delphi G+ group:

It really is beyond me why there is no Project.rc file which includes

  • Project.version.rc
  • Project.icon.rc
  • Project.themes.rc
  • Project.manifest.xml
  • and so forth.

That way, the .res file would be a compile-time thing (or even a thing of the past) – and the resource linker would assemble the various bits from their individual sources.

It has been an issue forever. Vincent Parrett correctly commented that if you clean out too much out of the Project.res file, the IDE gets confused:

The only thing it is used for is version info and the mainicon (the IDE gets confused if don’t do that).

In my own experience, this isn’t the case for all Delphi versions, but I forgot which versions suffer and which don’t. I think the IDE theming issue omitting the Application word in the .dpr is related.

Like many of the G+ commenters, I’ve switched to script based resources for my own projects a long time ago. That’s also the reason why I forgot: this approach just works for any Delphi version.

This post is a reminder to self to see if the IDE has finally refrained from doing Project.res handling itself.

–jeroen

Source: The curse of the Project.res file…

Some related posts:

  • Howdy all. Is it possible to get the IDE to build .res files from a RC file,… (fails in .dpk files)
  • twm’s homepage – dzPrepBuild for Delphi (English)
  • IDE theming issue omitting the Application word in the .dpr

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 1, Delphi 10 Seattle, Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 5 Comments »

Why sometimes you *want* to to have your DFM files stored as binary

Posted by jpluimers on 2016/08/25

Delphi Component/Tool vendors have to support a truckload of Delphi and C++ Builder versions which can be a pain: they have to work around problems in Delphi and C++ Builder versions that have long been abandoned by Borland/CodeGear/Embarcadero/Idera/…

This means that sometimes the Delphi Component/Tool vendors have to work around stuff in a way normal applications vendors would never do.

Recently I learned that sometimes this can be a painful thing: keeping DFM files in binary state.

I’m not kidding about either the DFM file format nor about supporting old versions:

  • Delphi has supported text based DFM files since like Delphi 2 for most of the features (yes, ‘most’ is the crucial word here) and by default stored DFM files in text format since Delphi 5.
  • For the Component/Tool Vendors, even Delphi 7 makes money though usually less than Delphi 2007 or the C++ Builder side of things.

The ‘most’ applies to this nice ARM compiler bug in Delphi 19.0.13856.4978 (for mere mortals, that’s Update 1 for RAD Studio XE5, Delphi XE5 and C++Builder XE5; I wish vendors would list those numbers/products in a central place):

  • [Android] MsBuild (dccAarm) error when compile FireMonkeyMobile projects with fmx forms
  • Project:  Delphi
  • Build #:  19.0.13856.4978

Source: [WayBack] QualityCentral

That’s why TeeChart still has most DFM files stored as binary files (again the ‘most’ word).

For version control and searching this is a pain, so normal application developers (the ones not using Delphi XE5 Update 1 for Android work) should run convert.exe with the -t (target=text) switch on DFM binary files.

Oh: this is fixed in version 19.0.13856.4978 (yes, that’s XE5 Update 2).

–jeroen

Via:

  • Borland Delphi 6 Developer’s Guide – Steve Teixeira, Xavier Pacheco – Google Books
  • DFM Converter, convert.exe – Delphi in a Nutshell [Book]
  • Quality Central bug 121004: [Android] MsBuild (dccAarm) error when compile FireMonkeyMobile projects with fmx forms
  • Update 1 for RAD Studio XE5, Delphi XE5 and C++Builder XE5
  • Update 2 for RAD Studio XE5, Delphi XE5 and C++Builder XE5
  • Delphi XE5 Update 2 got released last week, end-of-year Delphi XE5 offer, #CodingInDelphi book « The Wiert Corner – irregular stream of stuff

 

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email

Like this:

Like Loading…

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi x64, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Kylix, QC, Software Development | Leave a Comment »

« Previous Entries
 
Powered by WordPress.com.
Loading Comments...
%d