我正在用c ++做一些回调。 例如,该函数定义为:
void myFunction1(int arg1, float arg2) {
// ...
}
回调定义为:
typedef void (*callback_if_t )( const int64, const float );
callback_if_t pFunc = (callback_if_t)& myFunction1;
( *( callback_if_t ) pFunc )( 1, 0.5 );
如您所见,回调第一个参数类型与它指向的类型不同。
在Windows操作系统上,这没关系,参数正确传递到myFunction1。
但是在Android上,myFunction1中的两个参数值都不正确。
显然它是由第一个参数的不匹配类型引起的,堆栈已被破坏。
要解决这个问题,最直接的方法是更正类型,但是我需要int64 param来传递一些与64bit版本兼容的指针,否则,我将不得不添加数百万个回调类型T ^ T.
我不太清楚c ++机制,或者windows和android之间的区别 任何人都可以向我解释一下,有没有机会找到解决问题的廉价方法?
非常感谢!