到目前为止,我发现我可以通过两种(许多?)方式将传入的 BSTR 转换为 ANSI,我很想知道在速度/效率等方面,一种是否比另一种“更好”。
我已经使用了一段时间的方式是使用USES_CONVERSION
andW2A
宏,例如
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';
现在我承认,它更冗长,并且有两个调用,wcstombs
但据我所知USES_CONVERSION
,W2A
宏可能隐藏着各种乐趣和游戏。
哪个代码更高效/更快?或者,我可以使用另一种技术来更好地完成这项工作吗?