到目前爲止,我發現我可以進來BSTRs轉換爲ANSI兩個(很多嗎?)的方式,我很好奇,想知道一個人是否是相對比其他「更好」速度/效率等這是在C/C++轉換BSTR參數以ANSI更好的代碼?
我一直在使用了一段時間的方法是使用USES_CONVERSION
和W2A
宏,如
BSTR __stdcall F(BSTR p1, BSTR p2) {
USES_CONVERSION;
LPSTR sNum1 = W2A(p1);
LPSTR sNum2 = W2A(p2);
然而,最近我碰到另一種技術來:
BSTR __stdcall F(BSTR p1, BSTR p2) {
long amt = wcstombs(NULL, p1, 1);
sNum1 = (char *) malloc(amt);
wcstombs(sNum1, p1, amt);
*(sNum1 + amt) = '\0';
amt = wcstombs(NULL, p2, 1);
sNum2 = (char *) malloc(amt);
wcstombs(sNum2, p2, amt);
*(sNum2 + amt) = '\0';
現在我承認,這是wordier,並有兩個呼叫wcstombs
但我認識的USES_CONVERSION
和W2A
宏可能隱藏各種各樣的樂趣和遊戲。
哪個是更有效的/更快的代碼?或者,我還有另外一種技術可以更好地完成這項工作嗎?
第二個代碼是未定義行爲,因爲它寫超越分配的緩衝區結束。 – 2009-02-23 07:18:19