2016-07-22 100 views
0

OpenSSL庫提供了一種方法來寫你自己的BIOS。本質上,你加載一個函數指針的結構來讀取,寫入,創建,銷燬等openssl lib將使用的例程。如何爲非C++函數調用設置C++類方法的函數地址?

我想包在一個C++類此功能。 OpenSSL的有程序來設置它使用,像結構的函數指針:

BIO_meth_set_read(pBIOMethod, my_function_for_read); 

問:我可以用my_function_for_read一個類的方法?換句話說,類方法的地址是否可以在基於C的外部庫中作爲常規函數調用?

我不知道如果我帶只是類方法的地址使用類虛函數表。

感謝, -Andres

+0

你要調用C庫類的方法?如果是這樣,你不能像C不知道類實例那樣。但是你可以調用這個類的靜態方法。無論如何,檢查這個技術http://stackoverflow.com/questions/14815274/how-to-call-a-c-method-from-c – Dom

回答

0

可以調用靜態成員函數,你可以在簡單的C函數包。例如:

a.cc:

#include <stdio.h> 

class C { 
public: 
    static void hello(); 
}; 

void C::hello() 
{ 
    printf("hello\n"); 
} 

extern "C" { 
    void hi() 
    { 
    C::hello(); 
    } 
} 

b.c:

extern void hi(); 

int main() 
{ 
    hi(); 
} 

則:

g++ -c -o a.o a.cc 
gcc b.c a.o 
./a.out 
hello 

在靜態成員函數,你可以做++你喜歡的任何C。例如,投一個參數,一個指向C的實例,然後調用一個成員函數等