On Oct 12, 2014, at 11:11 AM, Stefan Dösinger <stefandoesinger(a)gmail.com> wrote:
Am 2014-10-12 15:58, schrieb Stefan Dösinger:
Something like static const struct { HKEY key; const WCHAR *long_name; const WCHAR *short_name; } keys[] = { {HKEY_LOCAL_MACHINE, {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0}, {'H','K','L','M',0}}, ... }; As Jonathan pointed out in a private message this does not work. Is there a canonical way to handle this? All solutions I found are somewhat ugly or I'm not sure if they are correct.
It should work to make the long_name and short_name fields arrays instead of pointers, although that brings back the use of fixed lengths. The other approach is to define the strings like: static const WCHAR short_name_HKLM[] = {'H','K','L','M',0}; … static const WCHAR long_name_HKEY_LOCAL_MACHINE[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0}; … and then build the table as: static const struct { HKEY key; const WCHAR *long_name; const WCHAR *short_name; } keys[] = { {HKEY_LOCAL_MACHINE, long_name_HKEY_LOCAL_MACHINE, short_name_HKLM}, … }; That's not especially compact, but at least it makes a single table and avoids fixed-length arrays. Regards, Ken