Одной из проблем является то, что вы предоставляете неправильные параметры для ExpandEnvironmentStrings
, а затем используете приведение, чтобы скрыть этот факт (хотя вам и требуется приведение, чтобы получить правильный тип из CString
).
Вы также используете неправильное значение для последнего параметра. Это должен быть размер выходного буфера, а не размер входной длины (из документации the maximum number of characters that can be stored in the buffer pointed to by the lpDst parameter
)
Сложив все это, вы хотите:
ExpandEnvironmentStrings((LPCTSTR)strPath,
cOutputPath,
sizeof(cOuputPath) / sizeof(*cOutputPath));