用 __cdecl调用约定,自己清栈

解决方案 »

  1.   

    用 __cdecl调用约定,自己清栈
      

  2.   

    使用...作函数参数,可参考msdn例子(variable argument lists)。
      

  3.   

    #include <stdarg.h>void myfunc_v(char *format,...)
    {
      va_list vp;
     char     *s1;  va_start(vp,format);
      s1 = va_arg(vp,char*);
      va_end(vp);
    }
      

  4.   

    C语言的参数压栈规则是从右向左,所以第一个参数(就是format)的地址就是[EBP+4],第二个参数的地址就是[EBP+8],依此类推。在函数内部不需要知道参数的数量,只要按照format里的格式一个一个转化就行了。
      

  5.   

    void MyDebugOutput(char *format, ... )
    {
    #ifdef _MYDEBUG_
    va_list er;
    va_start(er, format); vfprintf( debugfp,format, er); fflush(debugfp);
    #endif  //_MYDEBUG_
    }其他地方调用时和用 printf 一样,如 MyDebugOutput("output = %d, %d, %s\n", v1,v2,s1);
      

  6.   

    谢谢大家,我会自己看MSDN的!