Я пробовал несколько разных способов объединить два BSTR и не нашел способ делать gopd. Я вообще ничего не нашел в Интернете.Каков наилучший способ объединить два BSTR?
ответ
Вы должны использовать обертку, такую как ATL CComBSTR, которая также управляет ресурсами для вас.
без обертки вы должны сделать:
BSTR Concat(BSTR a, BSTR b)
{
auto lengthA = SysStringLen(a);
auto lengthB = SysStringLen(b);
auto result = SysAllocStringLen(NULL, lengthA + lengthB);
memcpy(result, a, lengthA * sizeof(OLECHAR));
memcpy(result + lengthA, b, lengthB * sizeof(OLECHAR));
result[lengthA + lengthB] = 0;
return result;
}
int main()
{
auto a = SysAllocString(L"AAA");
auto b = SysAllocString(L"BBB");
auto c = Concat(a, b);
std::wcout << a << " + " << b << " = " << c << "\n";
SysFreeString(a);
SysFreeString(b);
SysFreeString(c);
}
Вы можете использовать _bstr_t
обертки:
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")
// you have two BSTR's ...
BSTR pOne = SysAllocString(L"This is a ");
BSTR pTwo = SysAllocString(L"long string");
// you can wrap with _bstr_t
_bstr_t pWrapOne = pOne;
_bstr_t pWrapTwo = pTwo;
// then just concatenate like this
_bstr_t pConcat = pWrapOne + pWrapTwo;
pOne и pTwo НЕ BSTR. Вы ДОЛЖНЫ использовать функции SysAllocX для получения истинных BSTR (у них есть префикс длиной 4 байта), вроде) – manuell
@manuell Я стою исправлено! Большое спасибо, я внесла поправки в свой ответ. Предыдущая версия действительно компилируется нормально, но не работает, просто [как говорится здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069 (v = vs.85) .aspx). –
- 1. Каков наилучший способ объединить (объединить) 2 JSONObjects?
- 2. Каков наилучший способ объединить два uints в ulong в C#
- 3. Каков наилучший способ конкатенировать два вектора?
- 4. Каков наилучший способ объединить файлы js поставщиков?
- 5. Каков наилучший способ объединить mp3-файлы?
- 6. Каков наилучший способ разделить два объекта TimeSpan?
- 7. Каков наилучший способ сохранить два значения таблицы?
- 8. Каков наилучший способ сравнить два листа Excel?
- 9. Каков наилучший способ организации проекта?
- 10. Каков наилучший способ увеличения?
- 11. Каков наилучший способ запроса?
- 12. Каков наилучший способ многопоточности?
- 13. Каков наилучший способ кодирования CSS
- 14. Каков наилучший способ выполнения многопоточности?
- 15. Каков наилучший способ обрезать список?
- 16. Каков наилучший способ объединить несколько массивов в один массив?
- 17. Каков наилучший способ объединить разные классы JAVA в одном классе?
- 18. Каков наилучший способ объединить многомерные массивы в java?
- 19. Каков наилучший способ объединить двойной или плавающий в Scala?
- 20. Каков наилучший способ объединить RACCommands в общий результат?
- 21. Каков наилучший способ объединить локальные и глобальные состояния
- 22. Каков наилучший способ решить android.os.NetworkOnMainThreadException
- 23. Каков наилучший способ использования ffmpeg?
- 24. Каков наилучший способ загрузки фрагмента?
- 25. Каков наилучший способ объединить два объекта во время выполнения с помощью C#?
- 26. Каков наилучший способ добавить два числа без использования оператора +?
- 27. Каков наилучший способ вернуть два списка в C#?
- 28. Каков наилучший способ вернуть два значения из метода?
- 29. Каков наилучший способ использовать два ключа с помощью std :: map?
- 30. Каков наилучший способ реализовать два настраиваемых диалога один за другим?
Wow является то, что на самом деле самым простым способом Concat 2 строки. Я привык к C#, где это будет просто aString + bString; Для этого не существует существующих методов? Вау!!! C++ отстой – user565660
@ user565660 'BSTR' отстой. 'BSTR' - это интерфейс на основе C. Обертки, которые дают вам ценные строки, существуют, но не являются «BSTR's». – Yakk
@ user565660: Скажите «C++ сосет» снова, и он приходит и стреляет в вас. Yeap, в * Pulp Fiction * фильм способ. – sharptooth