对于现有的OpenSSL版本有可能做到这一点。我SWIG文件:痛饮OpenSSL的1.0 - 问题与STACK_OF宏
STACK *ssl_get_ciphers(SSL *ssl) {
return (STACK *)SSL_get_ciphers(ssl);
}
与OpenSSL的1.0.0beta3这种失败,因为STACK似乎不再定义。新的OpenSSL试图做的类型检查一个更好的工作,所以人都应该使用STACK_OF宏,它是这样定义的:
#define STACK_OF(type) struct stack_st_##type
如果我改变上面的代码使用STACK_OF:
STACK_OF(SSL_CIPHER) *ssl_get_ciphers(SSL *ssl) {
return SSL_get_ciphers(ssl);
}
然后呷不喜欢这样的:
Error: Syntax error in input(1).
我能得到的东西通过改变来编译:
struct stack_st_SSL_CIPHER *ssl_get_ciphers(SSL *ssl) {
return SSL_get_ciphers(ssl);
}
但是这显然不好,因为OpenSSL可能会将宏从发布版本更改为发布版本。有_STACK结构,但这又是OpenSSL私人细节,可能会从发布到发布。堆栈也可以作为参数进来,如:
int sk_x509_num(STACK_OF(X509) *stack) {
return sk_num(stack);
}
哪个SWIG不喜欢。
有什么办法可以使这个工作不诉诸于OpenSSL私人细节?