Передаю _TCHAR указатель в функцию
void foo(_TCHAR* somestring)
где somestring глобально объявленный TCHAR[200], далее вызываю
RegSetValueEx(..., REG_SZ, (BYTE*)somestring, sizeof(somestring));
И записывается только первый символ.
Если somestring глобальный, то его не надо передавать в функцию - он виден и так, потому он и глобальный :) И тогда - если он виден как TCHAR[200] - выражение sizeof(somestring) будет размером этого массива.
Но когда вы передаете его в функцию как void foo(_TCHAR* somestring), глобальная переменная становится скрыта, и под именем somestring в теле функции выступает уже совсем другая переменная - локальный аргумент-указатель. И для него sizeof(somestring) - размер не массива, а указателя, со всеми вытекающими последствиями.
Передавайте в функцию foo еще и длину для записи в реестр.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости