我試過幾種不同的方式來連接兩個BSTR,還沒有找到gopd的方式。我根本沒有在網上找到任何東西。串聯兩個BSTR的最佳方式是什麼?
2
A
回答
2
您應該使用像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);
}
2
可以使用_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;
+0
pOne和pTwo不是BSTR。你必須使用SysAllocX函數來獲得真正的BSTR(它們有一個4字節的長度「前綴」,排序) – manuell
+0
@manuell我站在更正!非常感謝,我修改了我的答案。以前的版本確實編譯好,但不起作用,就像[這裏說的](http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v = vs.85).aspx )。 –
相關問題
- 1. 什麼是安裝兩個版本的python的最佳方式
- 2. 劃分兩個TimeSpan對象的最佳方式是什麼?
- 3. 在GWT中比較兩個JavaScriptObjects的最佳方式是什麼?
- 4. 什麼是合併下面兩個查詢的最佳方式
- 5. 使用兩個比較器的最佳方式是什麼?
- 6. 跨兩個ActiveRecord行鏡像值的最佳方式是什麼?
- 7. 什麼是連接這兩個Django模型的最佳方式
- 8. 什麼是增加一個字符串的最佳方式[jQuery]
- 9. 使用MVCGrid.net實現內聯DropDownList的最佳方式是什麼?
- 10. 聯繫銀行的最佳方式是什麼? has_many或has_many_and_belongs_to?
- 11. 使用Android聯繫人的最佳方式是什麼?
- 12. 顯示關聯數據的最佳方式是什麼?
- 13. 什麼是查詢的最佳方式?
- 14. 鍵入()的最佳方式是什麼?
- 15. 什麼是開源的最佳方式?
- 16. 「投票」的最佳方式是什麼?
- 17. 維護兩臺OS X機器的最佳方式是什麼?
- 18. 最佳實踐 - 什麼是觀看目錄的最佳方式
- 19. 最佳匹配額定配對的最佳方式是什麼?
- 20. 保持兩個數據庫模式同步的最佳方式是什麼?
- 21. 什麼是合併字符串的最佳方式?
- 22. 解析字符串的最佳方式是什麼?
- 23. 什麼是拆分字符串的最佳方式? (C++)
- 24. 從VBA訪問串行端口的最佳方式是什麼?
- 25. PowerShell解析這些字符串的最佳方式是什麼?
- 26. Concatening字符串這樣做的最佳方式是什麼?
- 27. 聲明字符串的最佳方式是什麼?
- 28. 什麼是解釋「位串」的最佳方式
- 29. 在Arduino上存儲字符串的最佳方式是什麼?
- 30. 什麼是解析和替換字符串的最佳方式?
WOW是真正的最簡單的方法Concat的2串。我習慣了C#,它只是aString + bString;沒有現有的方法可以做到這一點?哇!!! C++很爛 – user565660
@ user565660'BSTR'很糟糕。 'BSTR'是一個基於C的接口。給你帶有價值的字符串的包裝器存在,但不是'BSTR'。 – Yakk
@ user565660:再說一遍「C++吸吮」,它就會在腳下射擊你。 Yeap,用*低俗小說*電影的方式。 – sharptooth