Chamando SWprint de uma lib separado falhar
-
23-08-2019 - |
Pergunta
Eu estou enfrentando um problema estranho. Eu estou usando sprintf ou swprintf de acordo com as define construir com ou sem unicode. Tenho envolto estas funções em minha própria função como esta:
int mysprintf( MCHAR* str,size_t size, const MCHAR* format, ... )
{
#ifdef MYUNICODE
return swprintf( str, size, format);
#else
return snprintf( str, format);
#endif
}
Estas funções estão em uma classe String, que é um projeto separado e é compilado como uma lib. Eu usá-lo em outro programa. Agora, se eu usar o mysprintf ()
msprintf(str,10, _M("%d,%d"),height,width);
Eu recebo alguns valores de lixo no buffer de string. Mas se eu chamar diretamente a função swprintf do programa funciona multas. Defini UNICODE na construção ea swprintf função não são chamados, mas enche alguns valores de lixo. Eu não entendo o que está acontecendo de errado.
Graças Amit
Solução
O problema de fato reside em que você tem sua própria função com número variável de parâmetros. Você precisa obter um ponteiro para a lista de argumentos e passar isso aos callees. va_start permite que você faça exatamente isso e ele precisa o último ponteiro na lista de argumentos para a sua função.
int mysprintf( MCHAR* str, size_t size, const MCHAR* format, ... )
{
va_list args;
va_start(args, format);
int result;
#ifdef MYUNICODE
result = vswprintf( str, size, format, args);
#else
result = ..
#endif
va_end(args);
return result;
}
Felicidades!
Outras dicas
Você precisa passar os os ... parâmetros da função mysprintf às funções prrintf que ele contém. Para fazer isso, você deve estar usando a família vprintf () de funções - veja http://msdn.microsoft.com/en-us/library/0zf95wk0%28VS.71%29.aspx para mais detalhes.