До сих пор я обнаружил, что могу преобразовывать входящие 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';
Теперь я согласен с вами, это более многословно и имеет два вызова wcstombs
, но, насколько я знаю, макросы USES_CONVERSION
и W2A
могут скрывать всевозможные развлечения и игры.
Какой код более эффективный/быстрый? Или есть другой метод, который я мог бы использовать, чтобы сделать эту работу лучше?