對於現有的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私人細節?