C ++回调函数

时间:2013-06-24 16:24:22

标签: c++ linux visual-c++

传递CRYPTO_set_locking_callback的C ++回调函数时出现以下错误。

Error C2664: 'CRYPTO_set_locking_callback' : cannot convert parameter 1 from
'void (__cdecl *)(int,int,char *,int)' to
'void (__cdecl *)(int,int,const char *,int)'
This conversion requires a reinterpret_cast, a C-style cast or
function-style cast

我的代码如下所示:

CRYPTO_set_locking_callback(&MyFunc::lock_callback);

void MyFunc::lock_callback(int mode, int type, char *file, int line)
{

    (void)file;
    (void)line;
    if (mode & CRYPTO_LOCK)
    {
        pthread_mutex_lock(&(lockarray[type]));
    }
    else
    {
        pthread_mutex_unlock(&(lockarray[type]));
    }
}

我尝试重新解释演员而没有运气,也不确定这样做的正确方法是什么。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

根据错误消息,您的函数的第三个参数应该是const char*

void MyFunc::lock_callback(int mode, int type, const char* file, int line)

这应该不是问题,因为你甚至没有使用它。


您也可以在the documentation中看到这一点:

void CRYPTO_lock(int mode, int n, const char *file, int line);

答案 1 :(得分:0)

将其更改为:

void MyFunc::lock_callback(int mode, int type, const char *file, int line){}