Это код, который я написал, используя sharptooths answer
int wslen = MultiByteToWideChar(CP_ACP, 0, str, strlen(str), 0, 0);
BSTR bstr = SysAllocStringLen(0, wslen);
MultiByteToWideChar(CP_ACP, 0, str, strlen(str), bstr, wslen);
// Use bstr here
SysFreeString(bstr);
Обратите внимание, что использование -1 для длины строки приводит к тому, что нулевой терминатор включается в результат