c言語呼び出しc++
1523 ワード
参考記事:
『C言語とC++言語の相互呼び出し(C++)』
『C++とCの関数が互いに呼び出される処理』
(1)C++関数を``extern"C"(あなたのC++コードでこの宣言をします)と宣言し、それを呼び出します(あなたのCまたはC++コードで呼び出します).
そして、f()をこのように使用することができます.
もちろん、上記の方法は非メンバー関数にのみ適用されます.
(2)Cでメンバー関数(虚関数を含む)を呼び出すには、簡単なパッケージ(wrapper)が必要です.
C::f():
(3)Cでリロード関数を呼び出したい場合は、Cコードで呼び出されるように、異なる名前のパッケージを提供する必要があります.
その後、各リロードf()をこのように使用することができます.
『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>