Jusqu'ici, j'ai découvert que je peux convertir les BSTR entrants en ANSI de deux façons (parmi de nombreuses?), Et je suis curieux de savoir si l'un est meilleur que l'autre en termes de vitesse/efficacité ...Quel est le meilleur code pour convertir les paramètres BSTR en ANSI en C/C++?
La façon dont j'ai été utilisé pendant un certain temps est d'utiliser les macros USES_CONVERSION
et W2A
, par exemple
BSTR __stdcall F(BSTR p1, BSTR p2) {
USES_CONVERSION;
LPSTR sNum1 = W2A(p1);
LPSTR sNum2 = W2A(p2);
Récemment, cependant, je suis tombé sur une autre technique:
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';
Maintenant, je vous accorde, il est verbeux, et a deux appels à wcstombs
mais pour tout ce que je connais les macros USES_CONVERSION
et W2A
peuvent être cacher toutes sortes d'amusement et de jeux.
Quel est le code le plus efficace/le plus rapide? Ou y a-t-il une autre technique que je pourrais utiliser qui ferait mieux le travail?
Le second code a un comportement non défini, car il écrit au-delà la fin du tampon alloué. –