2

我正在尝试调用以下函数,但我不知道如何填写第三个参数。

RSA* PEM_read_RSAPrivateKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u);

查找 pem_password_cb 我发现:

typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata);

我理解带有函数指针的 typedef,但这似乎不是函数指针。谁能帮我举例说明第三个参数中的内容?我无权访问 pem_password_cb 的实现。

4

3 回答 3

5

你是对的:这是函数类型的 typedef,而不是指针。但是该函数PEM_read_RSAPrivateKey接收到一个指向它的指针:pem_password_cb *cb.

用法就像任何其他函数指针一样:

int some_func(char *buf, int size, int rwflag, void *userdata) {
    return 0;
}

PEM_read_RSAPrivateKey(NULL, NULL, some_func, NULL);
于 2013-06-19T22:10:05.657 回答
2
/* Your function definition is like this. */

int my_pem_password_cb_fun(char *buf, int size, int rwflag, void *userdata)
{
    /* your stuff */
}

您将 my_pem_password_cb_fun 作为第三个参数传递。

pem_password_cb 只是一个 typedef,它不是实现。您需要实现一个函数 [my_pem_password_cb_fun()],它采用 typedef 中给出的参数。

于 2013-06-19T22:24:12.833 回答
1

它是函数的 typedef。

但请注意,参数pem_password_cb *cb是一个指针。所以参数实际上是一个函数指针。

所以你只需要实现一个匹配int pem_password_cb(char *buf, int size, int rwflag, void *userdata);签名的函数。

于 2013-06-19T22:10:15.130 回答