2012-03-06 7 views
1

私のC++コードからFORTRAN関数を呼びたいと思います。 FORTRAN関数は、上記の報告FCN機能は、C++クラス混合コード - 関数メンバポインタ

class CppClass 
{ 
... 
void FCN(int* a, double* b); 
... 
}; 

のメンバ関数である私は、このようにコードを呼び出すしたいと思いますが、それはそれと思われ、この

extern "C" { void FORTRANFUNC(void FCN(int*,double*), int *N); } 

のようなものですことはできません。

FORTRANFUNC(myClass.FCN, &n_); 

私はCppClass ::空の関数を渡していながら、FORTRANの関数は、空FCN機能を望んでいるので、コンパイラは文句を言います。

私を助けることができますか?

+0

C++タグが追加されました。そこにはFortranの行がないため、Fortranプログラマーであり、C++ではないため、理解できません。 –

+0

実際、Cボイド関数をFORTRAN(私は仮定しています)のサブルーチンに簡単に渡すことが可能であるはずです。 –

+0

はCでも可能ですか? http://www.glenmccl.com/ptr_cmp.htm –

答えて

1

メンバー関数ポインタはポインタではありません。コールサイトでの特別な処理が必要です。 Fortranのコードはドリルを認識することはまずありませんので、あなたがしようとしていることは不可能です。代わりに、無料の関数を渡す必要があります。任意のユーザーデータにはvoid*引数がないため、唯一の回避策(と私はこれを忠実に忠告しています:これは愚かな回避策です)を使用すると、 ):

CppClass *obj; 
void dispatch_fcn(int* a, double* b) { 
    obj->fcn(a, b); 
} 

// later: 
obj = &myClass; 
FCN(dispatch_fcn, &n_); 
関連する問題