C中如何調用C++函數 (轉載)

原貼:https://www.cnblogs.com/colife/p/3779208.htmlhtml

 

將 C++ 函數聲明爲``extern "C"''(在你的 C++ 代碼裏作這個聲明),而後調用它(在你的 C 或者 C++ 代碼裏調用)。例如:app

// C++ code:函數

extern "C" void f(int);code

void f(int i)htm

{blog

     // ...get

}io

 

而後,你能夠這樣使用 f():function

/* C code: */class

void f(int);

void cc(int i)

{

    f(i);

   /* ... */

    }

 

固然,這招只適用於非成員函數。若是你想要在 C 裏調用成員函數(包括虛函數),則須要提供一個簡單的包裝(wrapper)。例如:

// C++ code:

class C

{

       // ...

       virtual double f(int);

};

 

extern "C" double call_C_f(C* p, int i) // wrapper function

{

       return p->f(i);

}

 

而後,你就能夠這樣調用 C::f():

/* C code: */

double call_C_f(struct C* p, int i);

 

void ccc(struct C* p, int i)

{

       double d = call_C_f(p,i);

       /* ... */

}

 

若是你想在 C 裏調用重載函數,則必須提供不一樣名字的包裝,這樣才能被 C 代碼調用。例如:

// C++ code:

void f(int);

void f(double);

 

extern "C" void f_i(int i) { f(i); }

extern "C" void f_d(double d) { f(d); }

 

而後,你能夠這樣使用每一個重載的 f():

/* C code: */

void f_i(int);

void f_d(double);

 

void cccc(int i,double d)

{

       f_i(i);

       f_d(d);

       /* ... */

}

注意,這些技巧也適用於在 C 裏調用 C++ 類庫,即便你不能(或者不想)修改 C++ 頭文件。

相關文章
相關標籤/搜索