2022-11-27 09:48来源:m.sf1369.com作者:宇宇
在参数传递中,有两个重要的问题必须要明确说明:
1. 当参数个数多于一个时,按照什么顺序把参数压入堆栈;
2. 函数调用后,由谁来把堆栈恢复原状。
在高级语言中,就是通过函数的调用方式来说明这两个问题的。常见的调用方式有:
stdcall cdecl fastcall thiscall thiscall naked call
下面就分别介绍这几种调用方式:
1. stdcall
stdcall调用方式又被称为Pascal调用方式。在Microsoft C++系列的C/C++编译器中,使用PASCAL宏,WINAPI宏和CALLBACK宏来指定函数的调用方式为stdcall。
stdcall调用方式的函数声明为:
int _stdcall function(int a, int b);
stdcall的调用方式意味着:
(1) 参数从右向左一次压入堆栈
(2) 由被调用函数自己来恢复堆栈
(3) 函数名自动加前导下划线,后面紧跟着一个@,其后紧跟着参数的尺寸
上面那个函数翻译成汇编语言将变成:
push b 先压入第二个参数
push a 再压入第一个参数
call function 调用函数
在编译时,此函数的名字被翻译为_function@8
2. cdecl
cdecl调用方式又称为C调用方式,是C语言缺省的调用方式,它的语法为:
int function(int a, int b) // 不加修饰符就是C调用方式
int _cdecl function(int a, int b) // 明确指定用C调用方式
cdecl的调用方式决定了:
(1) 参数从右向左依次压入堆栈
(2) 由调用者恢复堆栈
(3) 函数名自动加前导下划线
由于是由调用者来恢复堆栈,因此C调用方式允许函数的参数个数是不固定的,这是C语言的一大特色。
此方式的函数被翻译为:
push b // 先压入第二个参数
push a // 在压入第一个参数
call funtion // 调用函数
add esp, 8 // 清理堆栈
在编译时,此方式的函数被翻译成:_function
3. fastcall
fastcall 按照名字上理解就可以知道,它是一种快速调用方式。此方式的函数的第一个和第二个DWORD参数通过ecx和edx传递,
后面的参数从右向左的顺序压入栈。
被调用函数清理堆栈。
函数名修个规则同stdcall
其声明语法为:
int fastcall function(int a, int b);
4. thiscall
thiscall 调用方式是唯一一种不能显示指定的修饰符。它是c++类成员函数缺省的调用方式。由于成员函数调用还有一个this指针,因此必须用这种特殊的调用方式。
thiscall调用方式意味着:
参数从右向左压入栈。
如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压入栈后被压入栈。
参数个数不定的,由调用者清理堆栈,否则由函数自己清理堆栈。
可以看到,对于参数个数固定的情况,它类似于stdcall,不定时则类似于cdecl。
5. naked call
是一种比较少见的调用方式,一般高级程序设计语言中不常见。
函数的声明调用方式和实际调用方式必须一致,必然编译器会产生混乱。
函数名字修改规则:
1. C编译时函数名修饰约定规则:
__stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,格式为_function@8。
__cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为_function。
__fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数,格式为@function@8。
它们均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输出的函数名无任何修饰且全部大写。
2. C++编译时函数名修饰约定规则:
__stdcall调用约定:
(1)以“?”标识函数名的开始,后跟函数名;
(2)函数名后面以“@@YG”标识参数表的开始,后跟参数表;
(3)参数表以代号表示:
X--void ,
D--char,
E--unsigned char,
F--short,
H--int,
I--unsigned int,
J--long,
K--unsigned long,
M--float,
N--double,
_N--bool,
....
PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代
表一次重复;
(4)参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;
(5)参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。
其格式为“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如
int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z”
void Test2() -----“?Test2@@YGXXZ”
__cdecl调用约定:
规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YA”。
__fastcall调用约定:
规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YI”。
VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用。
excel宏的制作方法如下:
第一步,录制新宏
选择“工具-宏-录制新宏”,在对话框中,为你将要做的宏设定一个快捷键。确定之后,可以看到一个小的工具栏,上面有个“停”字。从现在开始,你的每一步操作都会被记录下来,直到单击“停”字下面的按钮,结束宏录制过程。替换默认宏名主要是便于分别这些宏。宏名最多可为255个字符,并且必须以字母开始。其中可用的字符包括:字母、数字和下划线。宏名中不允许出现空格。通常用下划线代表空格。
第二步,执行宏
录制完一个宏后之后就可以执行它了,只要,就会重复刚才的一系列操作。
当执行一个宏时,EXCEL按照宏语句执行的情况就像VBA代码在对EXCEL进行“遥控”。但VBA的“遥控”不仅能使操作变得简便,还能使你获得一些使用EXCEL标准命令所无法实现的功能。
由于宏表函数GET.WORKBOOK(1)是通过宏功能起作用的,所以文档最后必须以Excel启用宏的工作簿(*.xlsm)格式另存,这样下次打开时才能正常显示工作表目录。
单击Excel左上角的保存按钮。
Excel会弹出提示“无法在未启用宏的工作簿中保存以下功能”,请单击“否”继续。
从“保存类型”下拉框中选择“Excel 启用宏的工作簿(*.xlsm)”文件格式,然后保存。
*.xlsm格式的文件。
此外,打开工作簿时Excel默认会禁用宏,得单击警告栏中的“启用内容”按钮才能显示工作表目录。
1、宏是一些指令集,每个人在制作表格的过程中也许会有多种功能,而一直重复做的话会非常繁琐,因此就可以通过宏录制来节约时间简化步骤,对于提高工作效率是非常有好处的。对于经常使用excel表格来工作的话,能有效地提高工作,让自己变得更轻松。
2、我们这里为每一行都填充第一个数字,那么直接点击导航栏中的视图,在这里能进行宏的定义。
3、接着选择使用相对引用,然后再点击录制。接着对于宏进行命名和定义快捷键,这样会加快工作效率。
4、接着录制。然后在第一行里将所有的行都复制上第一个数字,填充好,接着点击停止录制,这样一个宏定义就做好了。
5、接着将鼠标点击第二行的第一列,这时候再点击查看宏,或者直接按住快捷键也能直接执行宏定义。
6、点击执行,如果自己有宏快捷键的话,直接按快捷键就很容易做好了,能很快地将表格做好,效率非常高。
首先我们打开一个空的工作表中输入一些数字。
我们点击菜单栏中的视图,然后选择宏下面的录制宏按钮。
然后我们设置宏的名称和快捷键及说明,当然也可不设置,完成后点击确定;进入宏的录制阶段。
现在我们对表格的各种操作都会录制到宏内;我们设置C12单元格=C1+C2-C3+C4+C5+C6+C7*C8+C9+C10-C11
设置完成后按回车。
设置完成后我点击停止宏。
我们在D列输入一些数据。选择D12单元格。
我们点击视图宏按钮,然后在弹出的宏窗口中选择我们刚才设置的宏然后点击执行。
然后我们会看到我们刚才设置的公式自动存在计算在D12单元格内了。
1、当我们面对一份这样的报表,我们要把背景色去掉,并且加粗、居中,并且排序。可是,老板一天要你处理一百个这样的报表,还是重复操作!怎么办?
2、其实,不用怕,我们要用到“宏”来帮助我们。首先,我们要录制新的宏,简单而言就是把我们要重复操作的步骤录制起来! 方法是:点击工具——宏——录制新的宏。点击后,你就开始进入宏的录制了,把你步骤一步步录起来!
3、如果你的步骤已经录好了,点击停止按钮,表示结束录制。
4、老板又发给我一个这样的表,该怎样使用录制好的宏呢?很简单,点击工具——宏——宏——选择你录制好的宏的名字——选择当前工作薄——执行。如果你只需要宏的一步操作,也可以点击单步执行。如果你懂编码,可以点击编辑,就不用一样录制了,直接写代码。
5、一步就完成了的效果图是这样的。
以上内容便是为大家带来的关于Excel表格中宏的使用方法了。
找到宏设置方法如下:
1.点击Office按钮,选择Excel选项:
2.点击信任中心中的“信任中心设置”:
3.就可以看到宏设置:打开宏的方法:在Excel中,按下Alt+F11的快捷键,就可以打开宏编辑界面:按下F5就可以选择并执行已有的宏。
鼠标左键双击“Excel文件”。
点击菜单栏“文件”,点击“选项”,点击“自定义功能区”。
在自定义功能区右侧窗口,勾选“开发工具”,点击“确定”。
点击菜单栏“文件”,点击“选项”,点击“信任中心”,点击“信任中心设置”。
点击“宏设置”,勾选“启用所有宏”、“信任对VBA工程对象模型的访问”,点击“确定”。
点击菜单栏“视图”,点击“宏”,下拉选项选择“录制宏”,在弹出窗口点击“确定” 。
点击“A1”单元格,输入数据,测试文本,点击“宏”,下拉选项选择“停止录制”,选中“A1”单元格,鼠标右键单击选择“清除内容”,点击“宏”,下拉选项选择“查看宏”。
点击刚创建好的“宏1”,点击“执行”,点击“A1”单元格,执行宏后,数据又显示出来。
很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时,总会弹出宏安全警告,这让使用者倍感麻烦。而如果把宏的安全级设置为“低”,就可以取消excel中宏安全提示框了,又增加了恶意代码和病毒攻击的危险。怎么办呢?其实,只要为自己的宏添加一个签名就可以一劳永逸了。下面我们就以Microsoft Excel为例,谈一下具体的设置方法。 第一步、设置宏的安全级为“低”。 打开Excel,依次选择“工具→宏→Visual Basic 编辑器”,在“Visual Basic 编辑器”中依次选择“插入→模块”,在窗口中输入三行代码:sub macrodm()、MsBox “my macro”、End Sub(代码后没有标点)。然后依次选择“文件→关闭并返回到 Microsoft Excel”,保存并关闭当前的Excel文件。这时再打开刚才文件,就出现安全警告,提示宏被禁用,这时我们需依次选择“工具→宏→安全性”,在弹出的对话框中,将“宏”安全级设置为“低”,并点击“确定”保存。 第二步、安装 VBA 项目的数字证书。 打开“控制面板→添加或删除程序→更改或删除程序”,在右侧找到“Microsoft Office Professional Edition 2003”,单击“更改”,然后会出现“Microsoft Office 2003安装”,依次选择“添加或删除功能→下一步”,选中“选择应用程序的高级自定义”复选框,单击“下一步”,在“Office 共享功能”中,单击“VBA 项目的数字证书”左侧的箭头,然后在列表中依次单击“从本机运行”,最后点击“更新”,插入office的安装盘开始安装。 第三步、创建自己的数字证书。 安装成功后。在Microsoft Office的启动程序菜单中依次选择“Microsoft Office 工具→VBA 项目的数字证书”,在弹出的“创建数字证书”对话框的“您的证书名称”框中,键入数字证书的名称,点击“确定”就创建好了自己的数字证书。 第四步、对宏添加签名。 打开步骤二中创建的文件,依次选择“工具→宏→Visual Basic 编辑器”,在编辑器中再依次选择“工具→数字签名”,在“数字签名”对话框中,单击“选择”按钮,选择步骤四中创建的数字证书,并“确定”返回。然后依次选择“文件→关闭并返回到 Microsoft Excel”,保存并关闭该文件。 第五步、将自己添加为可靠发行商。 打开步骤五中的包含已签名的宏的文件。出现警告,选中“总是相信来自此发布者的宏”复选框,单击“启用宏”。再次打开该Excel文件,就不再显示任何安全警告了。你还可以通过“工具”菜单中的“宏”,来执行一下你所建立的宏。 这样通过五个步骤我们就可以快速的,安全的使用office里的宏命令了,再也不怕宏病毒的攻击了,也不会弹出那个烦人的宏安全警告框了。
1、打开Excel表格,点击进入开发工具。
2、进入开发工具后,点击代码选项中的宏安全性。
3、点击宏安全性后,就可信任中心宏设置中,然后把启用所有宏勾选上。
4、然后把启用所有宏勾选上之后,就可以使用宏了。
1.首先点击excel中的“视图”选项卡。
2.然后点击视图选项卡中的“宏”按钮。
3.在出现的选项菜单中点击“查看宏”。
4.接下来点击选中宏的名称,并点击“删除”按钮。
5.弹出提示时点击“是”,这样excel2010中的宏就被取消了。