摘自: http://www.research.att.com/~bs/bs_faq2.html#callCpp
How do I call a C++ function from C?
Just declare the C++ function ``extern "C"'' (in your C++ code) and call it (from your C or C++ code). For example:
// C++ code: extern "C" void f(int); void f(int i) { // ... }
Now f() can be used like this:
/* C code: */ void f(int); void cc(int i) { f(i); /* ... */ }
Naturally, this works only for non-member functions. If you want to call member functions (incl. virtual functions) from C, you need to provide a simple wrapper. For example:
// C++ code: class C { // ... virtual double f(int); }; extern "C" double call_C_f(C* p, int i) // wrapper function { return p->f(i); }
Now C::f() can be used like this:
/* 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); /* ... */ }
If you want to call overloaded functions from C, you must provide wrappers with distinct names for the C code to use. For example:
// 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); }
Now the f() functions can be used like this:
/* C code: */ void f_i(int); void f_d(double); void cccc(int i,double d) { f_i(i); f_d(d); /* ... */ }
Note that these techniques can be used to call a C++ library from C code even if you cannot (or do not want to) modify the C++ headers.