J'essaye de faire migrer du code C++ managé vers 64bits. J'ai une fonction qui obtient varargs, et quand je lui passe une variable System :: String, elle semble ne pas passer correctement. Voici une simplification du code qui montre le problème:Varargs ne fonctionne pas en 64 bits avec des objets gérés?
#include <stdio.h>
#include <stdarg.h>
void test(char* formatPtr, ...)
{
va_list args;
int bufSize;
char buffer[2600];
/////////////////////////////////////
//parse arguments from function stack
/////////////////////////////////////
va_start(args, formatPtr);
bufSize = vsprintf(buffer, (const char*) formatPtr, args);
printf(buffer);
va_end(args);
}
void main() {
System::String^ s;
s = "Shahar";
test("Hello %s", s);
getchar();
}
Lorsque ce code est exécuté en 32 bits, il affiche Bonjour Shahar. Lorsqu'il est exécuté en 64 bits, il affiche Bonjour Çz∟⌠ ■.
En supposant que je veux apporter le moins de changements au code, comment dois-je résoudre ce problème?
Le spécificateur% s accepte bien System :: String ^. Si je ne passe pas par Varargs, cela fonctionne parfaitement. Ceci est juste une simplification du code, pour montrer le problème. Je ne suis pas intéressé à rendre ce code sympa. Je veux que cela fonctionne, ainsi je peux prendre la solution au «vrai» code. –