LPCSTR                指向一个以"NULL"结束的WINDOWS字符串常量的指针
LPCTSTR                指向一个以"NULL"结束的Unicode或Windows字符串常量的指针

解决方案 »

  1.   


    _stdcall 函数调用时的参数传递方式。
      

  2.   

    LPCSTR 一个指向以0结尾的常量型字符串,在WINNT.h中的定义是这样的:
    typedef CONST CHAR * LPCTSTR
    _stdcall 是指函数调用时参数传递的方式,这种方式一般有两种,ANSI C 规定函数返回时由调用方清除参数(从栈中pop),_stdcall 一般指pascal调用,即由被调方清除。在windows程序中也可写作WINAPI,CALLBACK,PASCAL...etc.
      

  3.   

    _decl  
        C/C++的缺省调用协定,由调用者清理堆栈,这就是C/C++中可以使 
        用可变参数的函数的原因,所有参数自右至左入栈,生成的代码中 
        函数名有一个_(下划线)作前缀。 
    _stdcall (CALLBACK,WINAPI)
        Win32 API的调用协定,由被调用的函数清理堆栈,所有参数自右至 
        左入栈,生成的代码中函数名有一个_(下划线)作前缀一个@和参数总 
        字节数(十进制)作後缀。它不支持可变参数,但它产生的代码比 
        _cdecl的短,因为没有每次调用後的清理堆栈的代码。 
    _fastcall 
        即快速调用协定,由被调用的函数清理堆栈,第一和第二个参数在ECX 
        和EDX中传递,其他参数自右至左入栈。生成的代码中函数名有一个@ 
        和参数总字节数(十进制)作前缀。 
    thiscall 
        C++成员函数的缺省调用协定,不能用于显式函数说明,由被调用的函 
        数清理堆栈,所有参数自右至左入栈,this在ECX中传递,由于它不能 
        在C语言中使用,所以没有C的换名规则。 ifdef _MAC
    #define CALLBACK    PASCAL
    #define WINAPI      CDECL
    #define WINAPIV    CDECL
    #define APIENTRY    WINAPI
    #define APIPRIVATE  CDECL
    #ifdef _68K_
    #define PASCAL      __pascal
    #else
    #define PASCAL
    #endif
    #elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
    #define CALLBACK    __stdcall
    #define WINAPI      __stdcall
    #define WINAPIV    __cdecl
    #define APIENTRY    WINAPI
    #define APIPRIVATE  __stdcall
    #define PASCAL      __stdcall
    #else
    #define CALLBACK
    #define WINAPI
    #define WINAPIV
    #define APIENTRY    WINAPI
    #define APIPRIVATE
    #define PASCAL      pascal
    #endifVisual C++中,可以在函数类型前加_cdecl,_stdcall或者_pascal来表示其调用规范(默认为_cdecl)。
    C++ Builder也支持_fastcall调用规范.
    调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),
    堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。将调用规范看成是函数类型的一部分是很重要的;不能用不兼容的调用规范将地址赋值给函数指针。例如:// 被调用函数是以int为参数,以int为返回值
    __stdcall int callee(int); // 调用函数以函数指针为参数
    void caller( __cdecl int(*ptr)(int)); // 在p中企图存储被调用函数地址的非法操作
    __cdecl int(*p)(int) = callee; // 出错    指针p和callee()的类型不兼容,因为它们有不同的调用规范。
    因此不能将被调用者的地址赋值给指针p,尽管两者有相同的返回值和参数列。
      

  4.   

    谢谢FLY_PIG大哥的教导!能不能问一句?可以给我你的电子邮件好不好!
    我对大哥的崇拜之情,有如滔滔江水联绵不觉,对你的景仰有如黄河泛滥,一发而不可收拾!!!
    大哥,一定要给我你的邮箱号码!
    小弟的邮箱是[email protected]
      

  5.   

    ________                  ,d888888888b,                  ________
    """" _.-;'              ,dP"'        `"Qb,          _.-'.'    """"
      .'  <          ,d88buP"              "Qud88b,    <  .'
        `.  `.        dP"  8'  ..      ..  `8  "Qb    \  `.
          `>  `,    dP" .::8 _ :.@;  _  ;@.: _ 8::. "Qb    `,  `>
        /'  /    ,8' .::dP"      `.'      "Qb::. `8,  /'  /'
      /'    `\    dP .:::8(      `--^--'      )8:::. Qb `\ /'
      `-,_    `\  8' ::::"Qba,..,      ,..,adP":::: `8  `-,_
          ~-.  /'  ,8  ::::::,p`""        ""'q,::::::  8,  /' ~-.
          _-'/'  ,d' .:::::,d'              `b,:::::. `b,/'  _-'
      ,-'  `\  ,d' .::::::d'                `b::::::. `b\ .-'
      `-,_    `\,d' q888q8b,8    ,p      q,    8,d8p888p `b,\`-.
          `-,.  d' d",  ;  `b,  8,      ,8  ,d'  ;  ,"b `b `. `-,.
            .' ,8  8 `  `  `b,  `b,    ,d'  ,d'  '  ' 8  8 ,'  .'
          ,' / q, `b,      `b  a88a. .a88a  d'      ,d' ,p/  ,'
          <  `. `q,  `b,      8      8.8      8      ,d"  ,p'. <
          `.  ; `"Q888`b,    `Q8888P" "Q8888P'    ,d'888P"'  ; `.
    _____    `_'        "Q888P"            "Q888P"          `._;  ____
      """"""""                                                """""""
    嘿嘿,,,,[email protected]