Выражение благодарности @ user4581301 и @IInspectable за внесение предложений, приведших к приведенным ниже решениям.Оба они работали, я выбрал второй, потому что, похоже, нет соглашения о том, как лучше всего преобразовать строку в объект LPCTSTR.
if(dbHostName.length() > MAX_COMPUTERNAME_LENGTH)
{
dbHostName.truncate(MAX_COMPUTERNAME_LENGTH);
}
std::wstring wstring = dbHostName.toStdWString();
LPCTSTR cname = wstring.c_str();
SetComputerNameEx(ComputerNamePhysicalDnsHostname, cname);
И это реальное решение, которое я выбрал, ноопять же, они оба работали на Windows 8.1.
if(dbHostName.length() > MAX_COMPUTERNAME_LENGTH)
{
dbHostName.truncate(MAX_COMPUTERNAME_LENGTH);
}
std::string sname = dbHostName.toStdString();
LPCSTR cname = sname.c_str();
SetComputerNameExA(ComputerNamePhysicalDnsHostname, cname);
Правка 24.05.18. Кстати, это тоже работает и гораздо более кратко
bool nameSet = SetComputerNameEx(ComputerNamePhysicalDnsHostname, dbHostName.toStdWString().c_str());