请教个函数做为参数定义问题

明老头 2017-09-20 09:38:03
c++调用dll

请问一下 ReadCallback 函数 如何定义?

int CCreate_client_socket(int(*ReadCallback)(char,int),char ,u_short );

这样定义不对吧


下面参考内容
CCreate_client_socket函数在dll 中

int CCreate_client_socket(ReadCallback read,char *ip,u_short port);
1、read:回调函数
2、ip :IP地址字符串指针
3、port:端口号
成功返回值 1
失败返回值 0


回调函数定义
typedef int (CALLBACK *ReadCallback)(char *data, int len)
len大于0 表示收取到完整数据包。
len = 0. 表示对方关闭或者读取错误。


...全文
139 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-09-20
  • 打赏
  • 举报
回复
可以用typedef 重命名函数类型
自信男孩 2017-09-20
  • 打赏
  • 举报
回复
函数指针做了参数是可以,因为它是一个指针变量,只是这个指针变量指向一个固定的函数地址。 函数名本身就是函数栈的首地址,因此将对应的函数名传进去即可。
sdghchj 2017-09-20
  • 打赏
  • 举报
回复
有没有问题拿到编译器上一试就知道了。 int(*ReadCallback)(char,int) 定义一个函数指针ReadCallback typedef int (*ReadCallback)(char *data, int len) 定义一个函数指针类型ReadCallback
afterWards0711 2017-09-20
  • 打赏
  • 举报
回复
这个定义没什么问题。
Saleayas 2017-09-20
  • 打赏
  • 举报
回复
int CCreate_client_socket(int(*ReadCallback)(char,int),char ,u_short ); 这个是签名。 当时使用这个函数的时候,需要传入三个参数,其中第一个是一个函数指针。 此时你需要定义这个函数。当然,你也需要定义另外两个参数 char 和 u_short。 定义函数如下。 int ReadCallback(char,int) { return 0; } 这样你可以直接使用函数名做第一个参数。 不需要自己添加 CALLBACK,因为 CALLBACK 是 __stdcall ,除非签名是这样的。 int CCreate_client_socket(int(CALLBACK *ReadCallback)(char,int),char ,u_short );

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧