これまでのところ、着信 BSTR を 2 つの (多くの?) 方法で 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';
確かに、それはより冗長で、2 つの呼び出しがありますが、とマクロがあらゆる種類の楽しみとゲームを隠している可能性があることはwcstombs
わかっています。USES_CONVERSION
W2A
より効率的/高速なコードはどれですか? または、より良い仕事をするために使用できる別のテクニックはありますか?