‘壹’ 关于c语言中回调函数的实例
你的DLL注入每意义,应为你的DLL中的代码不会被有效执行。
DLL注入主要还是要HOOK系统API,但是NP是不允许你HOOK的。
你所谓的回调函数没有意义。
两进程通讯,windows有很多方法,
SendMessage就很简单。你的DLL在共享内存段加入句柄,主程序调用,并给句柄负值,DLL就可以直接SendMessageg给主窗口了。
嫌通讯数据不够大,可以使用CreateFileMapping,创建内存映像文件也可以。
最后,你试过你的DLL可以直接注入到游戏进程?NP无反应?
‘贰’ C语言的回调函数怎么用,请帮忙举例说明
看一下这个例子吧,我是这样理解的:
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回调函数定义
void
CALLBACK
callback()
//
回调函数
{
cout<<"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout<<"****Call_CallBack****\n";
mycb();
cout<<"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修改的话只要修改callback函数里的内容就行了,一般sdk封装后都会有回调,这样他人在调用sdk的时候就可以实现回调函数里的内容。
如果你需要理论的,网上搜回调函数,内容哈多随便看
‘叁’ C语言的回调函数
callback Function
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。
理解回调函数!
程序在调用一个函数(function)时(通常指api).相当于程序(program)呼叫(Call)了一个函数(function)关系表示如下:
call(调用)
program --------------------→ dll
程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的 DLL 函数往往是一些必须重复执行某些操作的函数.关系表示如下:
call(调用)
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回调)
当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的操作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!
也有这样的说法(比较容易理解):
回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:
1. 声明;
2. 定义;
3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。
‘肆’ C语言回调函数
括号里只是形参 表示该函数的输入是个指针。 我可以起名叫Pfun当然也可以是Qfun 还可以是fun1. 这没什么区别。 同样的,是该函数内部当然用的也是形参定义。所以是Pfun。
‘伍’ c语言中有关回调函数的概念。
1. 是的。
2. 不直接在search_link内部调用compare的好处是:可以将任意名称的函数当作参数传递,只要它们的返回类型,参数类型一致就OK,这样更具灵活性。
‘陆’ c/c++回调函数
请参考
http://patmusing.blog.163.com/blog/static/135834960200911308413342/一文中的函数指针
http://hi..com/spidermanzy/blog/item/b25b00956469c6097bf48016.html
回调函数其实就是函数指针的应用,如果想真的理解,不是简单停留在应用上,你需要先把指针再理解一番。。。。
上文写的很详细了
‘柒’ C语言中的回调函数实在搞不懂
typedef struct
{
int a;
void (*pshow)(int);
}TMP;
void func(TMP *tmp)
{
if(tmp->a >10)//如果a>10,则执行回调函数。
{
(tmp->pshow)(tmp->a);
}
}
void show(int a)
{
printf("a的值是%d\n",a);
}
void main()
{
TMP test;
test.a = 1;
test.pshow = show;
func(&test);
}
这只是举例,一般回调函数的用法为:
甲方进行结构体的定义(成员中包括回调函数的指针)
乙方定义结构体变量,并向甲方注册,
甲方收集N个乙方的注册形成结构体链表,在某个特定时刻遍历链表,进行回调。
‘捌’ c语言的回调函数的问题
我认为是这样的,如果采用消息触发的模式,结果是你在a处按下鼠标,则系统会将这个事件形成一个发给该窗口的消息进入消息队列,等到该窗口处理这个消息时,才会调用你的回调函数,你的程序是否停在a点由操作系统调度决定。
如果是中断方式触发的,你的程序可以被鼠标点击事件中断,那么可能会是在a点中断,最后又返回a点继续执行。
‘玖’ c语言回调函数例子,看了就明白什么是回调函数了
回调函数 就是上层调用 设置下去
底层通过函数指针调用上层函数
多文件中才有用 单文件可以模拟
比如
#include<stdio.h>
typedefvoid(*pFuncCb)(int);//定义回调函数。
voidcallback1(inta)
{
printf("=%d ",a);//打印1
}
voidcallback2(inta)
{
printf("=%d ",a);//打印2
}
pFuncCbcallback_function;
voidlowerFunc(intn)
{
inti;
for(i=n;i<n+10;i++)
if(callback_function)callback_function(i);
}
intmain()
{
callback_function=callback1;
lowerFunc(1);//会打印十次打印1,1到10
callback_function=NULL;
lowerFunc(10);//没有打印。
callback_function=callback2;
lowerFunc(100);//会打印十次打印2,100到110
return0;
}
‘拾’ 什么是C语言的回调函数具体怎么用呢
相当于递归的思想,在函数运行到某个部分,可以再调用本身或者其他函数回到之前的部分。