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,839 other subscribers

Archive for the ‘Windows Development’ Category

Michael Kaplan Obituary – Berkowitz-Kumin-Bookatz | Cleveland Heights OH (and a whole bunch of info in zero width Unicode stuff)

Posted by jpluimers on 2018/01/02

I totally missed the passing of Michael Scott Kaplan some 2 years ago, so a belated R.I.P. is in place.

Obituary for Michael Kaplan, Michael Scott Kaplan, 45, passed away Wednesday, October 21, 2015, in Redmond, WA, after a brave battle with MS for 25 years. He was a lead software developer for Microsoft.

Source: [WayBackMichael Kaplan Obituary – Berkowitz-Kumin-Bookatz | Cleveland Heights OH

Michael was the leading source on i18n, L10N, Unicode, sorting, normalisation and other things having to do with languages, representations and writing.

Besides that he was a really nice guy of which I enjoyed his MSDN materials.

Other people enjoy that too, so I’m glad his writings have been archived: [first archive.is, second archive.is, WayBackSorting it All Out: Archives

Here are some additional links:

More on miloush.net:

Read the rest of this entry »

Posted in Ansi, Development, Encoding, internatiolanization (i18n) and localization (l10), Software Development, The Old New Thing, UTF-8, UTF8, Windows Development | Leave a Comment »

Checking KeyPress is not the place to do your input validation

Posted by jpluimers on 2017/09/19

I have seen too many projects over the years trying to do input validation by checking KeyPress. This is not limited to Delphi projects (C#, VB and other projects suffer from this just as much). Most of these projects suffer from these::

  • Much of the KeyPress logic logic in the UI byusing half-baked copy-pasted code fragments.
  • They all fail missing important functionality (like paste, clear, Ctrl-key handling and such) either supporting or suppressing that functionality where needed

If doing Delphi, then that code should be rewritten in a generic way based on examples like like these:

–jeroen

Read the rest of this entry »

Posted in .NET, Delphi, Development, Software Development, Windows Development | Leave a Comment »

Windows – WorldTransform on the Printer’s Canvas can be a challenge…

Posted by jpluimers on 2017/09/05

// Don't use SetWorldTransform [WayBack] on Printer.
// Some drivers don't handle it correct
// We will only use ModifyWorldTransform [WayBack]
// Let Windows and Driver do the Job

Source: Hello, I use a component that do some nice things on the Printer’s Canvas…… [WayBack]

–jeroen

Posted in Delphi, Development, Software Development, Windows Development | 1 Comment »

Why doesn’t RevertToSelf undo the most recent SetThreadToken? | The Old New Thing

Posted by jpluimers on 2017/08/16

Oops: I fell in this trap as well: When you call Set­Thread­Token, [WayBack] it replaces the token. When you call Revert­To­Self [WayBack], the token is cleared and the thread no longer has a token. Maybe Revert­To­Self should have been named Clear­Thread­Token, since that would emphasize that the function erases any existing thread token, leaving the thread to inherit the identity of its host process.

Source: Why doesn’t RevertToSelf undo the most recent SetThreadToken? | The Old New Thing [WayBack]

–jeroen

Posted in Development, Software Development, The Old New Thing, Windows Development | Leave a Comment »

How can I get the default code page for a locale? – The Old New Thing

Posted by jpluimers on 2017/06/20

Ask GetLocaleInfo (example function GetAnsiCodePageForLocale included): [WayBackHow can I get the default code page for a locale? – The Old New Thing

UINT GetAnsiCodePageForLocale(LCID lcid)
{
  UINT acp;
  int sizeInChars = sizeof(acp) / sizeof(TCHAR);
  if (GetLocaleInfo(lcid,
                    LOCALE_IDEFAULTANSICODEPAGE |
                    LOCALE_RETURN_NUMBER,
                    reinterpret_cast<LPTSTR>(&acp),
                    sizeInChars) != sizeInChars) {
    // Oops - something went wrong
  }
  return acp;
}

And even though you didn’t ask, you can use LOCALE_IDEFAULT­CODE­PAGE to get the OEM code page for a locale.

Bonus gotchaThere are a number of locales that are Unicode-only. If you ask the Get­Locale­Info function and ask for their ANSI and OEM code pages, the answer is “Um, I don’t have one.” (You get zero back.)

Related:

–jeroen

Posted in Development, Encoding, internatiolanization (i18n) and localization (l10), Software Development, The Old New Thing, Windows Development, Windows-1252 | 2 Comments »

17 years ago, C:\nul\nul crashed/BSOD Windows; now $MFT does for Windows < 10

Posted by jpluimers on 2017/05/26

Source:

History repeating itself: [Archive.is31607 – C:\nul\nul crashes/BSOD then, now it’s this:

Via:

All versions prior to Windows 10 and Windows Server 2016 seem vulnerable.

So add $MFT to this list:

The following device names have been known to render a system unstable: CON,
NUL, AUX, PRN, CLOCK$, COMx, LPT1, and CONFIG$.

Oh BTW: history repeated itself this year too. With NUL

In short, Steven Sheldon created a rust package named nul which broke the complete package manager on Windows:

BTW: one of my gripes on learning new languages is that they come with a whole new idiom of their ecosystem: rust, cargo, crates, all sound like being a truck mechanic to me.

–jeroen

Read the rest of this entry »

Posted in Development, Microsoft Surface on Windows 7, NTFS, Power User, Security, Software Development, The Old New Thing, Windows, Windows 10, Windows 7, Windows 8, Windows 8.1, Windows 9, Windows 95, Windows 98, Windows Defender, Windows Development, Windows ME, Windows NT, Windows Server 2000, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Vista, Windows XP | Leave a Comment »

Use dumpbin to check if a PE file (dll/exe/…) is x64 or x86

Posted by jpluimers on 2017/05/04

Boy I wish I had known this long ago:

You can use DUMPBIN too. Use the /headers or /all flag and its the first file header listed.

dumpbin /headers cv210.dll

‘find’ can make life slightly easier:

dumpbin /headers cv210.dll |find "machine"
        8664 machine (x64)

Mark McDonald

–jeroen

via: c# – How to find if a native DLL file is compiled as x64 or x86? – Stack Overflow [WayBack]

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

pestudio – great tool for doing PE executable analysis

Posted by jpluimers on 2017/04/25

pestudio

The standard version of pestudio is free to download as a ZIP file (md5: D62BDE0319015C7CD5ABA8D03A36FFBF).
Once decompressed, pestudio does not require any installation nor does it change the system it is running on.
It is fully portable and runs on any Windows platform. Details about the features of this standard version are available at here [WayBack].

Download pestudio 8.54 [WayBack]

pestudio+

The professional version of pestudio must be purchased and provides the full set of features of the tool. Details about the professional version as well as the licence conditons are available here [WayBack].

Source: pestudio [WayBack]

A great guide is at PeStudio Standard [WayBack] which despite the name does an in-depth explanation on how to use this great tool.

–jeroen

Via: Guide / tutorial, nice tool to examine executables, find virus etc – David Berneda – Google+ [WayBack]

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

When BRCC32 throws `Fatal error Illegal macro definition in command line or defines page.` in a DUnitX project

Posted by jpluimers on 2017/04/19

I had a Fatal error Illegal macro definition in command line or defines page. thrown by BRCC32.exe in one of my Delphi projects.

As cgrc.exe could build the .rc file [source in Russian; WayBack], I reproduced it from the console with an Empty.rc file that has no content. That way I could rule out file content: now it had to be command-line arguments which is a different cause than any of the search results I found before.

My project was based on one of the DUnitX test projects. It ran in Delphi XE8, but the Delphi version doesn’t matter as BRCC32 hasn’t been updated since 1999.

Further below are the failure/success examples; this went wrong:

  1. DUnitX uses the DUNITX-DEBUG define to enable debugging of DUnitX itself in DUnitX.inc which also supports the DUNITXDEBUG define in the same area.
  2. Delphi will translate a .RC file in a project into a BRCC32.exe call adding the project conditional defines and search paths
  3. BRCC32.exe doesn’t like hyphens in conditional defines throwing a non-descriptive error Fatal error Illegal macro definition in command line or defines page.

So either removing DUNITX-DEBUG or changing it into DUNITXDEBUG solves the problem. Hence my pull-request.

Read the rest of this entry »

Posted in Delphi, Development, Resource Files and Scripts (.res/.rc), Software Development, Windows Development | Leave a Comment »

Delphi, resource files and includes – some links

Posted by jpluimers on 2017/02/23

Some links that were useful getting back into using Delphi with resource scripts and include files:

Maybe I should have considered this alternative:

–jeroen

PS: a first go on a resource file structure for Version Information is below.

Read the rest of this entry »

Posted in Delphi, Development, QC, Resource Files and Scripts (.res/.rc), Software Development | Leave a Comment »