社区
进程/线程/DLL
帖子详情
如何实现DLL里面的回调函数
kingmax54212008
2008-12-29 10:47:57
我想在我的C++的DLL里,实现回调函数,流程如下:
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回调)
我是该用MFC常规DLL还是MFC扩展DLL实现?如果实现?
(刚刚入门写DLL,大家多多指教!)
...全文
382
13
打赏
收藏
如何实现DLL里面的回调函数
我想在我的C++的DLL里,实现回调函数,流程如下: program --------------------→ dll ↑ ¦ ¦_______________________________¦ callback(回调) 我是该用MFC常规DLL还是MFC扩展DLL实现?如果实现? (刚刚入门写DLL,大家多多指教!)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sys0007
2009-01-01
打赏
举报
回复
回调就是把一个函数的地址当作参数出入到另外的函数里。
在DLL里实现也没什么特殊的
huxiao2005
2008-12-30
打赏
举报
回复
此代码适合远程推进安装,木马下载器,升级等功能
huxiao2005
2008-12-30
打赏
举报
回复
哎,不忍心,给你个例子吧
下面是我写的远程http下载程序给你看看,有个回调函数参数 RESPROC fun
typedef void (*RESPROC)(unsigned long , LPCSTR ); //结果处理回调函数定义
typedef LPVOID ( WINAPI * pInternetOpen ) (LPCTSTR ,DWORD ,LPCTSTR ,LPCTSTR ,DWORD );
typedef LPVOID ( WINAPI * pInternetOpenUrl ) ( LPVOID ,LPCTSTR ,LPCTSTR ,DWORD ,DWORD ,DWORD);
typedef BOOL ( WINAPI * pInternetCloseHandle ) ( LPVOID );
typedef BOOL ( WINAPI * pInternetReadFile ) (LPVOID ,LPVOID ,DWORD ,LPDWORD) ;
typedef BOOL (WINAPI *pInternetWriteFile )(LPVOID,LPCVOID,DWORD,LPDWORD);
/*远程http下载,作者:胡循锋,QQ:122108210, e-mail: huxiao2005@163.com*/
int DownFiles(const char Url[], const char savefile[], RESPROC fun)
{
HMODULE hDll;
LPVOID hInternet,hUrlHandle;
char buf[1024];
DWORD dwSize,ret=0;
int len=7;
FILE *pf=NULL;
hDll = LoadLibrary("wininet.dll");
if(hDll)
{
pInternetOpen InternetOpen=NULL;
pInternetOpenUrl InternetOpenUrl=NULL;
pInternetCloseHandle InternetCloseHandle=NULL;
pInternetReadFile InternetReadFile=NULL;
InternetOpen = ( pInternetOpen ) GetProcAddress( hDll, "InternetOpenA" );
InternetOpenUrl = (pInternetOpenUrl ) GetProcAddress ( hDll, "InternetOpenUrlA");
InternetCloseHandle = (pInternetCloseHandle) GetProcAddress (hDll,"InternetCloseHandle");
InternetReadFile = (pInternetReadFile) GetProcAddress(hDll,"InternetReadFile");
hInternet = InternetOpen("httpupdate",0, NULL, NULL, 0);
if (hInternet != NULL)
{
printf("start download %s...\ndownloading: 0 Bytes",Url);
hUrlHandle = InternetOpenUrl(hInternet, Url, NULL, 0, 0x04000000, 0);
if (hUrlHandle!= NULL)
{
pf = fopen(savefile,"wb+");
do
{
memset(buf,0,1024);
if (!InternetReadFile(hUrlHandle, buf,1024, &dwSize))
{
break;
}
if(dwSize>0&&pf){
fwrite(buf,1,dwSize,pf);
ret +=dwSize;
#if 0
if(len==0)
len = printf("%d Bytes",ret);
else{
while(len--)
printf("\b");
len = printf("%d Bytes",ret);
}
#endif
}else if(dwSize==0)
break;
if(fun)
fun(MAKELONG(dwSize,DLT_DONE_SIZE),savefile);
}while (TRUE);
if(pf)
fclose(pf);
InternetCloseHandle(hUrlHandle);
hUrlHandle = NULL;
}
InternetCloseHandle(hInternet);
hInternet = NULL;
}
FreeLibrary(hDll);
}
//printf("\nEnd download %s, Size:%d\n",Url,ret);
return ret;
}
huxiao2005
2008-12-30
打赏
举报
回复
太简单了,自己写代码琢磨吧
ilovedrv
2008-12-29
打赏
举报
回复
在动态库里面定一个接口,如下,然后在program里面调用这个接口,同时传递你的回调函数指针
externc "C" void enum(*, *, call_back_func *)
{
...
call_back_func(*)
...
}
cnzdgs
2008-12-29
打赏
举报
回复
MFC常规DLL和扩展DLL都可以使用回调函数。你需要定义回调函数指针的类型,在DLL导出函数中定义一个函数指针型参数,调用者通过该参数把回调函数(地址)传过来。
ouyh12345
2008-12-29
打赏
举报
回复
把回调函数作为参数
e_sharp
2008-12-29
打赏
举报
回复
UP
oyljerry
2008-12-29
打赏
举报
回复
比如dll里的
extern "C " __declspec(dllexport) void __stdcall call(void (*CallBack)())
{
CallBack();
}
在exe里:
void ExeFunc()
{
ShowMessage( "Callback ");
}
call(ExeFunc);
hxyman
2008-12-29
打赏
举报
回复
http://www.programfan.com/article/163.html
------------------------------------
Posted By EasyCsdn1.0
qrlvls
2008-12-29
打赏
举报
回复
不管回不回调,总之来说他都是一个可以被跨模块调用的函数而已
只要能够在dll里导出无论是扩展dll还是规则dll都是可用的,只是你自己需要区分何时适合用扩展dll,何时需要用规则dll
jgj58
2008-12-29
打赏
举报
回复
我在这方面也是初学,说的不对请大家多包涵
jgj58
2008-12-29
打赏
举报
回复
都可以实现的。 你说的DLL都差不多,只是常规的需要编写def文件。扩展MFC就不用了
在Unity3d中使用C++
DLL
之 回调 示例
在Unity3d中使用C++
DLL
之 回调。
里面
包含注册回调,接收回调等代码
实现
DLL
中的
回调函数
实现
DLL
中的
回调函数
实现
DLL
文件中存放的是各类程序的函数
实现
过程,当程序需要调用函数时需要先载入
DLL
,然后取得函数地址,最后进行调用。但是有时候我们需要
DLL
和程序进行通信,将应用程序的某些功能提供给
DLL
使用,这时就可以使用
回调函数
。 比如应用程序A调用动态链接库D,同时需要将D中的一些日志信息反馈给A进行处理。这时可以在A中设置写日志的
回调函数
提供给
DLL
。 一、调用程序中操作 应用程序提
Windows进程常用
DLL
模块注入技术
课程结合多种Windows进程常用
DLL
注入技术。远程线程注入APC注入,异步调用过程,向目标线程插入待执行任务从而完成注入。窗口消息注入,指定窗口进程注入,与全局钩子注入类似。环境块注入,获取进程上下文信息,直接性修改程序执行流程完成注入。进程入口点注入,在程序初始化的时机前将
dll
模块文件注入至目标主线程。进程调试级注入,涉及调试器相关功能调用知识点
dll
模块重定位内存注入,模拟操作系统加载PE文件方式,直接将
dll
文件内存数据写入目标进程并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级
Dll
模块注入技术,内核驱动入门扩展。
c语言调用
dll
回调函数
,
DLL
函数调用以及
回调函数
设置
在window开发中,紧张要将一些库编译成
DLL
以共享给其他程序使用,那么怎样调用
DLL
函数1.只是普通调用
DLL
中的函数1.1在VS2012中创建一个
DLL
程序,如My
DLL
。新建一个My
DLL
.h头文件,加入如下代码:extern "C" _declspec(
dll
export) void test();在源文件中,添加如下代码:#include "My
DLL
.h"#include void ...
C#委托
实现
C++
Dll
中的
回调函数
很多的
Dll
都是C和C++写的,那么如果C#想要调用
Dll
中的函数怎么办,尤其是
Dll
函数其中一个参数是函数指针的,即
里面
有回掉函数的用C#怎么
实现
? C中的回掉函数在C#中有中特殊的处理方式叫委托,即要
实现
的回掉函数委托给另一个和它返回值类型以及函数参数类型、数量一样的方法来
实现
。 一、新建项目Visual C++ Win32控制台应用,工程名为Ccreate
Dll
,解决方案名为
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章