Ваш код не работает, потому что Detach
дает вам BSTR
, не CComBSTR
. Вы могли бы использовать std::vector<BSTR> vStr
, если вы понимаете, что BSTR
указывает на первый символ строки, но есть также префикс длины перед памятью, на которую он указывает (см., Например, BSTR (Automation)), поэтому вам нужно быть осторожным с управляя им.
В качестве альтернативы, вы могли бы использовать
CComBSTR str(L"SomeStr");
std::vector<CComBSTR> vStr;
vStr.push_back(str);
которая могла бы сделать копию строки.
На странице MSDN по адресу CComBSTR не указано, что у нее есть какая-либо семантика движения, но она, возможно, была добавлена в код без обновления документации. Я так не думаю, и в этом случае ваше решение std::move
в вашем ответе будет таким же, как мой второй пример: простая копия.
re "(CComBSTR)" литье. Никогда не бросайте в неведении. – Steve