The Wiert Corner – irregular stream of stuff

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

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

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

    Join 1,854 other subscribers

Archive for the ‘Delphi’ Category

HashLib4Pascal is a Delphi/FPC compatible library that provides an easy to use interface for computing hashes and checksums of strings (with a specified encoding), files, streams, byte arrays and untyped data to mention but a few.

Posted by jpluimers on 2017/02/15

One day I will need lots of hashing in Delphi: Xor-el/HashLib4Pascal: HashLib4Pascal is a Delphi/FPC compatible library that provides an easy to use interface for computing hashes and checksums of strings (with a specified encoding), files, streams, byte arrays and untyped data to mention but a few. [WayBack]

via: Hello all,I made a port of “HashLib” (http://hashlib.codeplex.com/) “with some fixes, additions and modifications” for Delphi (2010 ( I hope ) and above)… – Ugochukwu Mmaduekwe – Google+ [WayBack]

It’s a port of the C# HashLib – Home [WayBack]

Another fork is at https://github.com/bonesoul/HashLib

–jeroen

Posted in .NET, C#, Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Encoding, FreePascal, Pascal, Software Development | Leave a Comment »

MahdiSafsafi/delphi-detours-library: Delphi Detours Library

Posted by jpluimers on 2017/02/14

I didn’t know about the MahdiSafsafi/delphi-detours-library: Delphi Detours Library [WayBack] until this question turned up:

Does anybody have a version of Delphi Detours (https://github.com/MahdiSafsafi/delphi-detours-library) that works with Delphi 2007?  – Primož Gabrijelčič – Google+ [WayBack]

No need for it yet, but it will be useful one day.

–jeroen

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

Date format converter from Text or Unix/Mac/Filetime/Microsoft to virtually any readable form

Posted by jpluimers on 2017/02/09

Brilliant Date format converter from dates in Text (almost any format) or timestamp numbers in Unix, Mac, Filetime or Microsoft (which is the same as Delphi TDateTime) format to any of these formats:

Text Date:
Date in human-readable text
Wednesday, March 23, 2016 4:05:39pm
RFC 822:
RFC 822 formatted date
Wed, 23 Mar 2016 16:05:39 +0000
ISO 8601:
ISO 8601 formatted date
2016-03-23T16:05:39+00:00
UNIX Timestamp:
seconds since Jan 1 1970
1458749139
Mac Timestamp:
seconds since Jan 1 1904
3541593939
Microsoft Timestamp:
days since Dec 31 1899
42452.670590278
FILETIME:
100-nanoseconds since Jan 1 1601
131032227390000000
01D1851D:D7B58B80

Source: Date format converter

–jeroen

Posted in *nix, .NET, Apple, Delphi, Development, Mac, Mac OS X / OS X / MacOS, Power User, Software Development | 1 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

 

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 »

Delphi: rbTC1416 package cannot find the Graphics unit: ensure your DCC_Namespace is correctly

Posted by jpluimers on 2017/02/02

I had to add this to my DCC_Namespace in the rbTC1416.dproj file to make it build under Delphi XE8:

Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;

The occurrence of this DCC_Namespace setting corresponds to the “Unit scope names” of the “All configurations – All Platforms” target in the project options.

That got rid of this error mesage:

[dcc32 Fatal Error] ppChrt.pas(17): F2613 Unit 'Graphics' not found.

It was for a site that had very little ReportBuilder but a truckload of FastReports stuff, so I temporarily needed their ReportBuilder for XE2 to just load in Delphi XE8 at design time so I could migrate.

Apparently not all the ReportBuilder packages use the same namespace definitions. Even worse: they add various namespaces at various target levels in an inconsistent way, so it took me a bit more time than I originally hoped for sorting this out.

Below is what the original settings were: only the .\TeeChart\Win32\TeePro900 directory had TeeChart project files (the .\Source and .\TeeChart\Win32\TeeStd900 directories hadn’t) and all three had slightly different unit source files for TeeChart support.

Read the rest of this entry »

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

Delphi compiler: the –depends switch / DCC_OutputDependencies property outputs a .d file listing all .dcu and .dcp files – via Stack Overflow/G+

Posted by jpluimers on 2017/02/01

Every now and then you want to know what units your project is made of. Not just the units require to build your project, but actually the ones ending up in the executable (i.e. not removed by the compiler or linker).

I had long forgotten that Chris Hesik  [WayBack] wrote in debugging – How can I find all the units in my Delphi app? – Stack Overflow  [WayBack]:

you can have the Delphi compiler show you a list of used .dcus by passing –depends when you compile a project. It will output a .d file with a list of the .dcus (and .dcps) that were required.

This reminded me of that: The –depends option is supposed to work with the Delphi compiler, and it outputs a .d file. Does it still work in Berlin, and where is the file supposed to be output to? – David Nottage – Google+  [WayBack]

In the mean time, I wrote a batch file that parses the .MAP file to see which units actually made it into your .EXE  [WayBack] which works only for Widows executables (as I hardly do cross-platform Delphi development).

Uwe Schuster [WayBack] reported the IDE won’t pass on the –depends switch in Delphi XE and up (version 15.0.3953.35171) [WayBack] which means you need to pass this from the command-line.

Ondrej Kelle (G+/SO) pointed out that:

msbuild hello.dproj /property:DCC_OutputDependencies=true

  • It does work from the IDE if you check “use MSBuild externally”

The msbuild property setting is available in at least Delphi/C++Builder versions 2007 and 2010..Berlin as it is in CodeGear.Cpp.Targets and CodeGear.Delphi.Targets/RTL.Build.targets for BDS versions 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 and 18. It might be available in versions 2005/2006/2009 as well but I don’t have these lying around any more.

–jeroen

Read the rest of this entry »

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

Delphi “F2039 Could not create output file” on drc files

Posted by jpluimers on 2017/01/19

I had this error when building my Delphi app and needing detailed MAP files.

Somehow, then Delphi also tries to generate .drc files and fails.

Performing the “F2039 Could not create output file” drc – Google Search didn’t reveal much.

So I fired up Process Monitor and looked for file access patterns (see dump below), that all were OK.

Then I opened Windows Explorer and saw freshly generated .DRC files marked as some type of VLC Player file. I’ve had loads of trouble with VLC in the past, but I inherited this PC so I didn’t notice VLC Player was installed by the previous developer.

Lesson learned: when starting a gig, always request a fresh PC

So I uninstalled VLC Player and now everything works fine.

Oh btw: .DRC files are Delphi Resource String files.

–jeroen

Read the rest of this entry »

Posted in Delphi, Delphi 2007, Development, Software Development | 4 Comments »

An exponential back-off implementation I used somewhere; probably room for improvement, but it works good enough.

Posted by jpluimers on 2017/01/17

I will probably need this again somewhere in the future: An exponential back-off implementation I used somewhere; probably room for improvement, but it works good enough.

It’s Delphi, but I’ve not seen practical implementations in C# either.

(the updated version thanks to Anders Melander).

–jeroen


function TryGetLocationLockWithExponentialBackOff: Boolean;
const
cBase = 2;
cMaxWaitMilliSeconds = 1500;
var
lWaitMilliSeconds: integer;
begin
Result := True;
lWaitMilliSeconds := cBase;
while (not TryGetLocationLock) do
begin
if (lWaitMilliSeconds > cMaxWaitMilliSeconds) then
Exit(False);
Sleep(lWaitMilliSeconds);
Inc(lWaitMilliSeconds, lWaitMilliSeconds);
end;
end;


function TryGetLocationLockWithExponentialBackOff: Boolean;
const
cBase = 2;
cMaxWaitMilliSeconds = 1500;
var
lIteration: Integer;
lWaitMilliSeconds: Single;
begin
lIteration := 1;
lWaitMilliSeconds := 0;
while lWaitMilliSeconds < cMaxWaitMilliSeconds do
begin
Result := TryGetLocationLock;
if Result then
Exit;
lWaitMilliSeconds := IntPower(cBase, lIteration);
Inc(lIteration);
Sleep(Round(lWaitMilliSeconds));
end;
Result := TryGetLocationLock;
end;

Posted in .NET, C#, Delphi, Development, Software Development | 5 Comments »

RSS feed for Dave’s Development Blog – mostly OTA articles on the Open Tools API for Delphi and C++ Builder

Posted by jpluimers on 2017/01/16

TL;DR: http://www.davidghoyle.co.uk/WordPress/?feed=rss2

Since there is no RSS link  on the page [WayBackDave’s Development Blog – Software Development using Borland / Codegear / Embarcadero RAD Studio

Since I wanted to follow his “blog” (which is sort of a collection of WordPress pages, mainly about the programming OTA: the Open Tools API interface to Delphi and C++ Builder), I was looking for the RSS feed.

Luckily, Feedly knows how to detect most blogging platforms, so it came up with https://feedly.com/i/subscription/feed/http://www.davidghoyle.co.uk/WordPress/?feed=rss2 which indicates the final bit is the RSS feed URL.

Some interesting links from there:

via: [WayBackOTA Interface Search 1.1 and GitHub http://www.davidghoyle.co.uk/WordPress/?…

–jeroen

Posted in C++, C++ Builder, Delphi, Development, RSS, SocialMedia, Software Development | Leave a Comment »

Tool for licensing and protect my Delphi Win32 apps – Stack Overflow

Posted by jpluimers on 2017/01/11

I like the opinion of Mason Wheeler best. This is the shortened version:

… Only a perfect licensing system would actually do you any good, and there’s no such thing. And in the age of the Internet, if your system isn’t perfect, all it takes is for one person anywhere in the world to produce a crack and upload it somewhere,

If you want people to pay for your software instead of just downloading it, the one and only way to do so is to make your software good enough that people are willing to pay money for it….

But if you insist on running the rat-race against the internet of crackers or your software is in such a niche that cracking is more costly than paying for a license: Tool for licensing and protect my Delphi Win32 apps – Stack Overflow

–jeroen

Posted in Delphi, Development, Software Development | 2 Comments »