Ah ha! The penny at last drops. The dangers of copying code that works in 32 bit, but no longer in 64 bit.
My DLL is 64bit, but when I created a test executable to try and send the message I must have compiled it as 32 bit rather than 64 so it worked.
The SendMessage needed to be:
WinAPI.Windows.SendMessage(Hdl, WM_COPYDATA, 0, LPARAM(@copyDataStruct));
That was the only reason the message was not getting through and had I realised this 48 hours ago I might have some hair left.
It's time for that Lockdown drink! I will raise a glass to you