А хотя нет, так расходы памяти выше — в любом случае будет статически жить массив размером sizeof(DWORD)*8. В этом случае тогда можно постпуить еще проще — сразу макросом формировать соотв. строку статически и возвращать ее. В случае программного решения "большими" получаются только ненулевые цифры (т.е. <= push DWORD_PTR = 5 байт), а нулевые push BYTE_PRT = 2 байта). Вероятно, это все-таки выгоднее (медленнее, но выгоднее).
Вот бы как-нибудь избавиться от этого оверхеда... я пока вижу только один вариант — списки типов и Const2Type, в этом случае размер строки будет с точностью до sizeof(DWORD), да и избавимся от ограничений на длину строки. Но как тогда формировать строку из списка типов, непонятно... Есть мысли?
__>>Это можно переделать так :
__>>__>> static void MakeStr(LPTSTR szBuffer)
__>> {
__>> static const DWORD a[]={n0,n1,n2,n3,n4,n5,n6,n7};
__>> FlattenStr(szBuffer, a, 7);
__>> }
__>>};
__>>
__>>Таким образом в случае изменения CNameId функцию FlattenStr не будет необходимости менять.