最近为自己做个小工具,遇到的技术问题多多,还好有度娘帮衬,这才风雨飘摇的往目标慢慢接近,说起来那是步步惊心啊。
非法调用的问题,先看代码:
class 某党某师
{
public:
BOOL 清除卧底行动();
static BOOLCALLBACK 刺杀行动组(); // 隶属情报部门 CALLBACK,放这里是来某党某师执行任务的
void 爆破小队();
};
BOOL 某党某师::清除卧底行动()
{
return 情报部门行动(,,,刺杀行动组,,,); //情报部门摸底排查,派出刺杀行动组 : 1号首长亲自指派情报部门来某党某师配合协助(调用系统API)
}
BOOL CALLBACK 某党某师::刺杀行动组()
{
爆破小队(); // 问题出来了,就是我们编译时会看到的:非静态成员函数的非法调用!
... ...
}
void 某党某师::爆破小队()
{
专业爆破;
}
------------------------------------------------------------------------------------------------------------------------------------------------
分析:
1. 刺杀行动组CALLBACK函数要么是全局的要么是类的静态函数,没有this(指针)的概念,眼里不认识啥地方部门的工作人员;
2.爆破小队隶属某党某师,他的一切行动都是this安排去执行的,在某党某师内行动,当然不需要时时表明身份:我是this的人;
结论:
这是信息沟通不全导致的误会,难怪刺杀行动组要驱赶爆破小队:老子这里是敏感部门,会爆破了不起啊,谁让你来的?没证件,老子就踢你,在编译环节上我告你:非静态成员函数的非法调用!!!
解决办法:
BOOL 某党某师::清除卧底行动()
{
LPARAM 特殊行动证明 =(LPARAM)this; //某党某师盖公章证明
return 情报部门行动(,,,刺杀行动组,,特殊行动证明;,); //情报部门摸底排查,派出刺杀行动组 : 1号首长亲自指派情报部门来某党某师配合协助(调用系统API)
}
BOOL CALLBACK 某党某师::刺杀行动组(,证件,)
{
某党某师* app = (某党某师*)(l证件);
app->爆破小队(); // 误会排除
... ...
}