c言語呼び出しc++

1523 ワード

参考記事:
『C言語とC++言語の相互呼び出し(C++)』
『C++とCの関数が互いに呼び出される処理』
(1)C++関数を``extern"C"(あなたのC++コードでこの宣言をします)と宣言し、それを呼び出します(あなたのCまたはC++コードで呼び出します).
<span style="font-size:14px;">extern "C" void f(int);
void f(int i)
{
     // ...
}
</span>

そして、f()をこのように使用することができます.
<span style="font-size:14px;">void f(int);
void cc(int i)
{
    f(i);
}</span>

もちろん、上記の方法は非メンバー関数にのみ適用されます.
(2)Cでメンバー関数(虚関数を含む)を呼び出すには、簡単なパッケージ(wrapper)が必要です.
<span style="font-size:14px;">class C
{
       // ...
       virtual double f(int);
};
extern "C" double call_C_f(C* p, int i) // wrapper function
{
       return p->f(i);
}</span>

C::f():
<span style="font-size:14px;">double call_C_f(struct C* p, int i);
void ccc(struct C* p, int i)
{
       double d = call_C_f(p,i);
}</span>

(3)Cでリロード関数を呼び出したい場合は、Cコードで呼び出されるように、異なる名前のパッケージを提供する必要があります.
<span style="font-size:14px;">void f(int);
void f(double);
extern "C" void f_i(int i) { f(i); }
extern "C" void f_d(double d) { f(d); }</span>

その後、各リロードf()をこのように使用することができます.
<span style="font-size:14px;">void f_i(int);
void f_d(double);
void cccc(int i,double d)
{
       f_i(i);
       f_d(d);
}</span>