0

为 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]));
    }
}

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

4

2 回答 2

2

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

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

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


您也可以在文档中看到这一点:

void CRYPTO_lock(int mode, int n, const char *file, int line);
于 2013-06-24T16:25:53.687 回答
0

将其更改为:

void MyFunc::lock_callback(int mode, int type, const char *file, int line){}
于 2013-06-24T16:26:55.767 回答