当前位置:  开发笔记 > 编程语言 > 正文

哪个是在C/C++中将BSTR参数转换为ANSI的更好代码?

如何解决《哪个是在C/C++中将BSTR参数转换为ANSI的更好代码?》经验,为你挑选了1个好方法。

到目前为止,我发现我可以用两种(多种?)方式将传入的BSTR转换为ANSI,我很想知道在速度/效率等方面是否比另一种"更好".

我一直使用的方式是使用USES_CONVERSIONW2A宏,例如

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宏和宏可能隐藏了各种各样的乐趣和游戏.

哪个代码更有效/更快?或者,是否有另一种我可以使用的技术可以更好地完成工作?



1> dirkgently..:

来自MSDN:

[...]建议的BSTR字符串转换方法是使用CComBSTR类.要转换为BSTR,请将现有字符串传递给CComBSTR的构造函数.要从BSTR转换,请使用COLE2 [C] DestinationType [EX],例如COLE2T.

从CComBSTR页面:

[...] CComBSTR类提供了许多成员(构造函数,赋值运算符和比较运算符),它们将ANSI或Unicode字符串作为参数.这些函数的ANSI版本效率低于它们的Unicode版本,因为临时Unicode字符串通常是在内部创建的.为提高效率,请尽可能使用Unicode版本.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有