图形开发包SoTimerSensor.h
class SoTimerSensor : public SoTimerQueueSensor {
 public:
 SoTimerSensor();
 SoTimerSensor(SoSensorCB *func, void *data);
...
 virtual ~SoTimerSensor();在VC中调用:
myview.h:
...
    SoTimerSensor * m_timer;
myview.cpp:
Cmyview::Cmyview()
: CFormView(Cmyview::IDD)
{
...
    m_timer = new SoTimerSensor(onTimer, NULL);
}
...
void Cmyview::onhcTimer(void *, SoSensor *)
{
...
}
我编译出错:
error C2664: '__thiscall SoTimerSensor::SoTimerSensor(void (__cdecl *)(void *,class SoSensor *),void *)' : cannot convert parameter 1 from 'void (void *,class SoSensor *)' to 'void (__cdecl *)(void *,class SoSensor *
)'
        None of the functions with this name in scope match the target type

解决方案 »

  1.   

    两个函数指针的类型不一样,成员函数OnTime的Calling Conventions是thiscall,而SoSensorCB是__cdecl的,他们的区别用MSDN以Calling Conventions为关键字查查。可以考虑定义一个__cdecl的函数,
    void __cdecl TimerCallBack( void* data )
    {
        Cmyview* view = (Cmyview*)data;
        view->OnTime();
    }
    在Cmyview的构造函数中改为:
    m_timer = new SoTimerSensor(TimerCallBack, this);
    不知能不能解决你的问题。
      

  2.   

    我现在按照xietianlu的方法这样定义ontime():
    void  __cdecl OnTime(void *, SoSensor *)
    {...};
    在Cmyview的构造函数中为:
    m_timer = new SoTimerSensor(OnTime, NULL);
    这样是可以,可是不知道OnTime中怎样获得Cmyview中定义的变量?
    如我这样不行:
    Cmyview *view;
    一调用view->Scale的值就出错。
      

  3.   

    谢谢xietianlu,我终于解决了。