2016-07-22 5 views
0

opensslライブラリは、独自のBIOを作成する方法を提供します。本質的に、opensslライブラリが使用するルーチンの読み込み、書き込み、作成、破棄などのための関数ポインタの構造体をロードします。非C++関数呼び出しのC++クラスメソッドの関数アドレスを設定する方法は?

私はこの機能をC++クラスにラップしようとしています。

BIO_meth_set_read(pBIOMethod, my_function_for_read); 

質問:OpenSSLは、それは同様に、使用する構造の関数ポインタを設定するためのルーチンを持っている私はmy_function_for_readのクラスメソッドを使用できますか?つまり、クラスメソッドのアドレスは、Cベースの外部ライブラリで通常の関数として呼び出すことができますか?

私はそのクラスメソッドのアドレスを取る場合、クラスvtableが使用されているかどうかはわかりません。

おかげで、 -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のインスタンスへのポインタに引数をキャストしてから、メンバー関数などを呼び出します。

関連する問題