⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_62367.htm

📁 vc
💻 HTM
字号:
<p>
序号:62367 发表者:月下清泉 发表日期:2003-11-26 14:41:13
<br>主题:关于宏的问题
<br>内容:#define DECLARE_DYNCREATE(class_name)\<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_DYNAMIC(class_name)\<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static CObject* PASCAL CreateObject();<BR>中的“PASCAL&#34;什么意思啊<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-11-26 14:49:08
<br>内容:#define PASCAL _stdcall
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:月下清泉 回复日期:2003-11-26 14:51:56
<br>内容:呵呵,谢谢<BR>我是菜鸟啊<BR>_stdcall 又是什么意思啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-11-26 15:02:24
<br>内容:WINAPI宏,一种调用规范
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-11-26 15:07:10
<br>内容: Visual C++ 编译器选项&nbsp;&nbsp; <BR><BR>/Gd、/Gr、/Gz(调用约定)请参见<BR>编译器选项 | 设置编译器选项<BR>/Gd<BR>/Gr<BR>/Gz<BR>这些选项确定: <BR><BR>将函数参数推送到堆栈上的顺序。 <BR>是由调用方函数还是由被调用函数在调用结束时从堆栈中移除参数。 <BR>编译器用来标识各个函数的名称修饰约定。 <BR>/Gd 为默认设置,对除 C++ 成员函数和标记为 __stdcall 或 __fastcall 的函数以外的所有函数指定 C 调用约定。<BR><BR>/Gr 对除 C++ 成员函数和标记为 __cdecl 或 __stdcall 的函数以外的所有函数指定 __fastcall 调用约定。所有 __fastcall 函数必须具有原型。<BR><BR>/Gz 对除采用的参数个数可变的函数和标记为 __cdecl 或 __fastcall 的函数以外的所有原型 C 函数指定 __stdcall 调用约定。所有 __stdcall 函数必须具有原型。 <BR><BR>注意 x86 Specific —&gt;默认情况下,C++ 成员函数当其 this 指针在 ECX 寄存器中传递时使用调用约定。所有其他参数被从右到左推送到堆栈上,被调用例程从堆栈中弹出成员函数的参数。END x86 Specific 显式标记为 __cdecl、__fastcall 或 __stdcall 的成员函数使用指定的调用约定。采用的参数个数可变的成员函数总是使用 __cdecl 调用约定。<BR>__cdecl 细节<BR>对于 C,__cdecl 命名约定使用以下划线 ( _ ) 开头的函数名;不执行任何大小写转换。除非声明为 extern &#34;C&#34;,否则 C++ 函数将使用不同的名称修饰方案。有关更多信息,请参阅修饰名。 <BR><BR>__fastcall 细节<BR>某些 __fastcall 函数参数在寄存器 x86 Specific —&gt; ECX 和 EDX END x86 Specific 中传递,其余参数则被从右到左推送到堆栈上。被调用例程在返回之前从堆栈中弹出这些参数。/Gr 通常减少执行时间。<BR><BR>注意 在对用内联程序集语言编写的任意函数使用 __fastcall 调用约定时,一定要小心。您对寄存器的使用可能与编译器对它们的使用发生冲突。<BR>对于 C,__fastcall 命名约定使用以“at”符 (@) 开头的函数名,后跟函数参数大小(以字节为单位)。不执行任何大小写转换。编译器使用下列命名约定模板:<BR><BR>@function_name@number<BR>注意 Microsoft 不保证不同编译器版本之间的 __fastcall 调用约定的实现相同。例如,16 位编译器与 32 位编译器的实现就不同。<BR>当使用 __fastcall 命名约定时,请使用标准包含文件。否则将获取无法解析的外部引用。<BR><BR>__stdcall 细节<BR>__stdcall 函数的参数被从右到左推送到堆栈上,被调用函数在返回之前从堆栈中弹出这些参数。<BR><BR>对于 C,__stdcall 命名约定使用以下划线 ( _ ) 开头的函数名,后跟“at”符 (@) 和函数参数大小(以字节为单位)。不执行任何大小写转换。编译器使用下列命名约定模板:<BR><BR>_functionname@number<BR>x86 Specific—&gt;<BR><BR>此选项对 C++ 方法和函数的名称修饰无效。除非声明为 extern &#34;C&#34;,否则 C++ 方法和函数将使用不同的名称修饰方案。有关更多信息,请参阅修饰名。 <BR><BR>END x86 Specific<BR><BR>在 Visual Studio 开发环境中设置此编译器选项 <BR><BR>打开此项目的“属性页”对话框。有关详细信息,请参阅设置 Visual C++ 项目属性。 <BR>单击“C/C++”文件夹。 <BR>单击“高级”属性页。 <BR>修改“调用约定”属性。 <BR>以编程方式设置此编译器选项<BR><BR>请参阅 CallingConvention 属性。<BR><BR>请参见<BR>编译器选项 | 设置编译器选项<BR><BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>将文档反馈发送给 Microsoft<BR><BR>&amp;copy; 2002 Microsoft Corporation。保留所有权利。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wafer 回复日期:2003-11-26 15:09:04
<br>内容:这个关键字定义了在函数调用完成以后,如何清除栈。<BR>如果用_stdcall,则函数自己清除。所以在跨平台开发时,都是用_stdcall。<BR>如果用_cdecl,则栈的清除由调用者完成。这样的话,由于不同编译器产生栈的方式不尽相同,所以可能不会正常完成。 <BR><BR>但是,当遇到象fprintf()这样的参数可变、不定长的函数,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况下就用_cdecl.<BR><BR><BR>2003-11-26 15:13:13

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -