Salut,
Le lien que tu as donné (web20tools.net...), c'est du dotnet.
Le dotnet est une des principales causes de décès chez les développeurs.

A éviter donc.
(Rooooh, c'est petit ça.)
La méthode de Neo_Fr prent 3 arguments :
L'adresse de la chaîne à traduire.
L'adresse de la chaîne où la traduction sera mise en place.
La taille de la chaîne à traduire.
Tu peux convertir une string à partir d'un char * avec la méthode c_str(), et récupérer la taille avec length().
Problème : c_str ne renvoie pas forcément un pointeur sur la vrai chaîne, autrement dit, modifiée ce qui est pointé par c_str() ne modifie pas forcément la string. Donc pour le buffer, c'est rappé. Faudrait passer par un char *.
Tu peux par contre essayer de réécrire la fonction de Neo_Fr en C++.
Vala ce que ça me donne :
string __stdcall Convert(string & In)
{
string Out;
const BYTE Table[] = {'à', 0x00, 'â', 'ã', 'ä', 0x00, 0x00, 0x00,
0x00, 'è', 'é', 'ê', 'ë', 'ì', 'î', 'ï' };
DWORD i = 0, j = 0, sub;
while(1)
{
if((i < In.length() - 2) && (*((WORD*) &In[i]) == 'E%'))
{
sub = (In[i+2] > 0x39) ? 0x37 : 0x30;
Out += Table[ (In[i+2]-sub) ];
i+=2; j++;
}else Out+= In[i];
if(i++ >= In.length()) break;
}
return Out; // renvoi la taille de Out
}
J'ai rajouté un test car si (i == In.length() - 1), lorsque l'on fait le (*((WORD*) &In[i]) == 'E%'), on risque de dépasser la fin de la chaîne si elle n'a pas de zéro terminal.
Réecrite comme ça, les performances en prennent probablement un coup à cause de la classe string en général et de la concaténation en particulier.