社区
进程/线程/DLL
帖子详情
如何实现DLL里面的回调函数
kingmax54212008
2008-12-29 10:47:57
我想在我的C++的DLL里,实现回调函数,流程如下:
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回调)
我是该用MFC常规DLL还是MFC扩展DLL实现?如果实现?
(刚刚入门写DLL,大家多多指教!)
...全文
430
13
打赏
收藏
如何实现DLL里面的回调函数
我想在我的C++的DLL里,实现回调函数,流程如下: program --------------------→ dll ↑ ¦ ¦_______________________________¦ callback(回调) 我是该用MFC常规DLL还是MFC扩展DLL实现?如果实现? (刚刚入门写DLL,大家多多指教!)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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就不用了
亲测可用,java 成功调用
dll
函数。包含调用
回调函数
,springboot版本。最近由于公司业务需要,要调用
dll
文件,用JNA调用。
亲测可用,java 成功调用
dll
函数。包含调用
回调函数
,springboot版本。最近由于公司业务需要,要调用
dll
文件,用JNA调用。
DLL
中的
回调函数
实现
DLL
中的
回调函数
实现
DLL
文件中存放的是各类程序的函数
实现
过程,当程序需要调用函数时需要先载入
DLL
,然后取得函数地址,最后进行调用。但是有时候我们需要
DLL
和程序进行通信,将应用程序的某些功能提供给
DLL
使用,这时就可以使用
回调函数
。 比如应用程序A调用动态链接库D,同时需要将D中的一些日志信息反馈给A进行处理。这时可以在A中设置写日志的
回调函数
提供给
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
,解决方案名为
Labview 对C语言
回调函数
的
实现
labview
实现
Dll
中的
回调函数
的调用 曾经困惑于labview 调用
DLL
中的函数,该
DLL
所调用的函数内部当发生一些事件时调用
回调函数
,用labview该去怎么
实现
。 假设
Dll
中有导出函数funcA(int a,int b ,int (*callback) (int,int)),导出函数funcA有三个参数,两个整形参数,一个函数指针(即
回调函数
),这个导出函数用l
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章