描述:
我用ATL写了一个COM的DLL,定义了一个接口IA,在接口IA中定义了一个方法BB,但是这个方法BB中,我想传递一个函数指针作为参数,但在编译时总是提示不能用函数作为参数,请问有什么办法吗?
typedef BOOL (*FUNC)(int *a);
LRESULT BB(FUNC pFunc);
在应用DLL的时候,类似于如下:
BOOL Func(int *a)
{
return TRUE;
}
BB(Func);
就象EnumWindows可以直接传递EnumWindwosProc一样的作用.
谢谢!
解决方案1:
不知道随便写一个类型如void * ,然后强制类型转换一下行不行?
虽然不建议这么作,但是如果调用的时候不使用其它语言,是完全可行的,因为指针是传一段地址,也就是传值!
任意四个字节长度的数据类型都可以,至于怎么传递,怎么转换,随便,
欧一直用memcpy,价格便宜,量又足,我们一直都用它。关键是你必须让MIDL知道
你传递的参数大小,其他的一概不需要管,什么类型都可以转换成其他的任何类型
以下代码可以运行:
#include "stdafx.h"
typedef bool (*Fun)(int);
bool Funa(int a);
bool Funb(Fun fun);
int main(int argc, char* argv[])
{
printf("Hello World!\n");
Funb(Funa);
return 0;
}
bool Funa(int a)
{
printf("Fun a is called!! a=%d",a);
return true;
}
bool Funb(Fun fun)
{
fun(10);
return true;
}
不知道随便写一个类型如void * ,然后强制类型转换一下行不行?