Merapatkan Pembahagian C-C: Mendedahkan Fungsi C dalam Aplikasi C
Apabila bekerja dengan persekitaran bahasa campuran, keupayaan untuk menyepadukan kod bertulis dengan lancar dalam bahasa yang berbeza menjadi penting. Masalah ini menjadi lebih ketara apabila kod ditulis dalam C dan C , kerana nama C yang menggertak menimbulkan cabaran.
Pertimbangkan keperluan untuk memanggil fungsi C daripada C. Dalam domain C, bahagian luar " Kata kunci C" membolehkan kami mendedahkan fungsi dalam cara yang serasi C, menyediakan cara yang mudah untuk menggunakan fungsi C dalam aplikasi C. Walau bagaimanapun, senario terbalik, di mana kod C mesti memanggil fungsi C, memberikan set halangan yang berbeza.
Mengatasi Nama Mangling
Halangan utama timbul daripada nama Mangling konvensyen yang digunakan oleh C . Konvensyen ini menyukarkan kod C untuk merujuk terus simbol C, yang membawa kepada ralat simbol yang tidak dapat diselesaikan.
Untuk mengatasinya, pendekatan biasa melibatkan penciptaan API C yang membungkus fungsi C. API ini terdiri daripada kod C tulen yang mendedahkan fungsi yang diingini tanpa menggunakan kelas atau objek C. Dengan mengikut gaya berorientasikan objek, API boleh menyediakan antara muka biasa untuk kod C berinteraksi.
Contoh Pelaksanaan
Begini cara pendekatan C API boleh dilaksanakan dalam amalan:
// *.h file #ifdef __cplusplus #define EXTERNC extern "C" #else #define EXTERNC #endif typedef void* mylibrary_mytype_t; EXTERNC mylibrary_mytype_t mylibrary_mytype_init(); EXTERNC void mylibrary_mytype_destroy(mylibrary_mytype_t mytype); EXTERNC void mylibrary_mytype_doit(mylibrary_mytype_t self, int param); #undef EXTERNC
// *.cpp file mylibrary_mytype_t mylibrary_mytype_init() { return new MyType; } void mylibrary_mytype_destroy(mylibrary_mytype_t untyped_ptr) { MyType* typed_ptr = static_cast<MyType*>(untyped_ptr); delete typed_ptr; } void mylibrary_mytype_doit(mylibrary_mytype_t untyped_self, int param) { MyType* typed_self = static_cast<MyType*>(untyped_self); typed_self->doIt(param); }
Dalam contoh ini, C API menyediakan satu set fungsi untuk mencipta, memusnahkan dan memanipulasi objek jenis MyType, menyembunyikan butiran pelaksanaan kelas C dan objek di sebalik tabir.
Atas ialah kandungan terperinci Bagaimanakah C Code Boleh Mengakses Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!