回调参数类型不匹配导致错误值

时间:2016-07-23 11:08:46

标签: android c++ callback parameter-passing

我正在用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之间的区别 任何人都可以向我解释一下,有没有机会找到解决问题的廉价方法?

非常感谢!

0 个答案:

没有答案