一.原因:
c是按顺序执行的,当被调用函数定义在主调函数的后面,
而主调函数不能标识这个还未遇到过的函数,
∴需要在主调函数前声明被调用的函数,来通知被调函数的存在
二.位置:
(1)函数内:则只能在此函数中标识
(2)函数外:则从声明点以后的函数,均能标识
(定义在函数外的,一般定义在源文件首部)
Eg:
#include
void test(int i);//声明函数
void main(){
test(1);
}
void test(int i){
}
三.格式:可以省略形参名,甚至形参类型
(但省形参类型,编译器就不能检查实参和形参是否匹配, ∴建议最好不要省略)
四.注意:与定义不同,函数声明可以反复,变量声明在函数外可以反复
Ps:在函数外声明的变量为全局变量
一.作用:创建显示操作消息对话框
二.适用:Visual Basic 6.0)
三.参数:
hWnd:
指定该对话框的所有者窗口。如果该参数为空(0),则该对话框不属于任何窗口(?)。
lpText:
显示在对话框中的消息。
lpCaption:
在对话框标题栏中显示的字符串表达式。如果该参数为空(vbNullString),则使用默认的“错误”作为对话框的标题。
wType:
指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。可以为下列常数之一或某几个数值相加的和。
指定按钮样式,
指定图标样式,
指定默认按钮,
四.返回值:
如果没有足够内存创建消息对话框,则返回0。
如果函数成功运行,则返回:点击的相应按钮
五.与MessageBoxA和MessageBoxW的区别:
MessageBox其实是在库里声明了一个宏
当使用宽字符,即unicode时,自动转换用MessageBoxW
当使用窄字符时,会自动帮转换用MEssageBoxA
即当宽窄不相同的时候编译器会自动帮你转换
∴基本没区别
一.定义:字符格式化命令
二.主要功能:把格式化的数据写入某字符串缓冲区
三.头文件:stdio.h
四.参数列表:
buffer: char型指针,指向将要写入的字符串的缓冲区。
format: 格式化字符串。
[argument]…: 可选参数,可以是任何类型的数据。
五.返回值:
返回写入buffer 的字符数,出错则返回-1.
若buffer 或 format 空指针,且不出错而继续,函数将返回-1,
并且 errno 会被设置为 EINVAL。
sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。
即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5
一.作用:向系统申请分配指定size个字节的内存空间
二.返回类型: void* 类型。void* 表示未确定类型的指针。
C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
三.返回值:
分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回NULL。
当内存不再使用时,应使用free()函数将内存块释放。
函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
四.原型:
extern void *malloc(unsigned int num_bytes);
以前malloc返回char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
五.头文件:
#include
#include
六.与new的区别:
new 返回指定类型的指针,并且可以自动计算所需
int *p;
p = new int;
//返回类型为int *类型(整数型指针),分配大小为sizeof(int);
int *parr;
parr = new int[100];
//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;
malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针
int *p;
p = (int*)malloc(sizeof(int) * 128);
//分配128个(可根据实际需要替换该数值)整型存储单元,
//并将这128个连续的整型存储单元的首地址存储到指针变量p中
double *pd = (double*)malloc(sizeof(double) * 12);
//分配12个double型存储单元,
//并将首地址存储到指针变量pd中
#include
#include
#include
void main(){
char str[10];
for(int i=0;i<16;i++){
sprintf(str,"color %x%x",i,15-i);
system(str);anshu
Sleep(2000);
}
getchar();
}
Linux
参考以下两篇文章
http://blog.sina.com.cn/s/blog_8043547601013rxf.html
https://www.centos.bz/2013/07/linux-shell-c-show-color-word/
导出dll文件使用dll控制其他的程序
(1)
(2)
(3)参考代码可如下(test.c)
#include
_declspec(dllexport) void go(){
MessageBoxA(0,"HI","Title",MB_OK);
}
(4)运行,获取生成的dll路径
正常现象
(5)打开
(6)刷新可见新开的软件(新打开的软件在最底下)
(7)注入
(8)将获得的路径输入,并输入要执行的函数
//一个项目中必须有且只有一个main()
(1)拖动箭头点击QQ窗体
(2)获取红框中的数据
(3)代码如下:
#include
#include
void openQQ()
{
ShellExecuteA(0, "open", "\"D:\\QQ\\Bin\\QQScLauncher.exe\"", 0, 0, 1);
//非无意义值的参数依次为“open”字符串,打开路径,打开是否显示
//或者ShellExecuteA(0, "open", "D:\\QQ\\Bin\\QQScLauncher.exe", 0, 0, 1);
}
void moveQQ()
{
HWND win = FindWindowA("TXGuiFoundation","QQ");//HWND是 qq的编号; find寻找窗口
if (win == NULL)//-------------每获取一个对象,都要判断是否为空---------------
{
printf("获取窗口对象失败!");
}
int i = 0;
while (i < 768){
SetWindowPos(win, NULL, i*16/9, i, 500, 400, 0);//非无意义值的参数依次为: 窗口对象, x坐标,y坐标,宽度,高度
i += 10;//每次增加10像素
Sleep(100);
if (i/10%2)
{
ShowWindow(win, SW_HIDE);
}
else
{
ShowWindow(win, SW_SHOW);
}
}
}
void main()
{
//system("taskkill /f /im qq.exe");
openQQ();
Sleep(5000);
moveQQ();
Sleep(5000);
}
SystemParametersInfoA(20,1,"C:\\Users\ASUS-PC\Pictures\\123.png",1);
//SystemParametersInfo(20, True, 图片路径, 1)