【发布时间】:2012-05-19 17:53:58
【问题描述】:
我正在使用 libssh2 并在我的 SSHWrapper 对象之外定义了一个回调函数:
static void kbd_callback(const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract);
在我的 SSHWrapper 对象中,我执行以下操作,在验证会话时传递回调函数:
/* Create a session instance */
LIBSSH2_SESSION *session = libssh2_session_init_ex(NULL, NULL, NULL, self);
while ((rc = libssh2_userauth_keyboard_interactive(session, userChar, &kbd_callback)) == LIBSSH2_ERROR_EAGAIN);
我想知道的是,是否可以在我的对象中移动kbd_callback() 函数,使其成为类方法:+(void) kbd_callback:...?
如果是这样,我如何获取该函数的地址以便将其传递给 C 函数 libssh2_userauth_keyboard_interactive()?
【问题讨论】:
-
好吧,总结一下,我说以下是否正确:在这种特定情况下,使用 IMP 将不起作用。 IMP 可用于其他需要签名要求不那么严格的 c 风格函数指针的情况?
-
我认为这是一个很好的总结,是的。我要补充一点,您已经采用的方法是我在将 C 样式库与 Objective-C 程序集成时所做的。
-
酷,感谢并感谢其他所有人的帮助。
标签: objective-c c function-pointers libssh2