Portabilität ABI-Grenzen modernes (C++)
Verwenden Sie bei binären Schnittstellengrenzen ausreichend portable Datentypen und Konventionen."Portable"-Typ ist ein c integrierter Typ oder eine Struktur, die nur c integrierte Typen enthält.Klassentypen können nur verwendet werden, wenn der Aufrufer und Aufgerufener auf Layout, einigen Aufrufkonvention, etc.. Dies ist nur möglich, wenn beide mit den gleichen Compilereinstellungen für Compiler und kompiliert werden.
Gewusst wie: Reduzieren Sie eine Klasse C Portabilität
Wenn Aufrufer mit fremdsprachigen Compiler kompiliert werden können, dann "Glätten Sie" an eine API "Extern C" mit einer bestimmten Aufrufkonvention:
// class widget {
// widget();
// ~widget();
// double method( int, gadget& );
// };
extern “C” { // functions using explicit “this”
struct widget; // + opaque type (fwd decl only)
widget* STDCALL widget_create(); // ctor → create new “this”
void STDCALL widget_destroy( widget* ); // dtor → consume “this”
double STDCALL widget_method( widget*, int, gadget* ); // method → use “this”
}