ฉันมีไลบรารี C ++ ที่มีคลาสต่างๆสำหรับจัดการข้อมูล ฉันมีซอร์สโค้ดสำหรับไลบรารี
ฉันต้องการขยาย C ++ API เพื่อรองรับการเรียกฟังก์ชัน C เพื่อให้สามารถใช้ไลบรารีกับรหัส C และรหัส C ++ ได้ในเวลาเดียวกัน
ฉันใช้โซ่เครื่องมือ GNU (gcc, glibc ฯลฯ ) ดังนั้นการรองรับภาษาและสถาปัตยกรรมจึงไม่ใช่ปัญหา
มีสาเหตุใดบ้างที่ทำให้ไม่สามารถทำได้ในทางเทคนิค ?
มีgotchaอะไรบ้างที่ฉันต้องระวัง?
มีแหล่งข้อมูลโค้ดตัวอย่างและ / หรือเอกสารเกี่ยวกับเรื่องนี้หรือไม่
สิ่งอื่น ๆ ที่ฉันได้ค้นพบ:
- ใช้สิ่งต่อไปนี้เพื่อตัดส่วนหัว C ++ ของคุณที่จำเป็นต้องใช้โดยรหัส C
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- เก็บอินเทอร์เฟซ C ++ "ของจริง" ไว้ในไฟล์ส่วนหัวที่แยกจากกันซึ่งไม่รวมอยู่ใน C คิดหลักการ PIMPLที่นี่ การใช้
#ifndef __cplusplus #error
สิ่งของต่างๆช่วยในการตรวจจับความบ้าคลั่ง - ระวังตัวระบุ C ++ เป็นชื่อในรหัส C
- Enums มีขนาดแตกต่างกันระหว่างคอมไพเลอร์ C และ C ++ อาจไม่ใช่ปัญหาหากคุณใช้โซ่เครื่องมือ GNU แต่ยังไงก็ต้องระวัง
สำหรับโครงสร้างให้ทำตามแบบฟอร์มต่อไปนี้เพื่อไม่ให้ C สับสน
typedef struct X { ... } X
จากนั้นใช้พอยน์เตอร์เพื่อส่งผ่านวัตถุ C ++ พวกเขาจะต้องประกาศใน C เป็นโครงสร้าง X โดยที่ X คือวัตถุ C ++
ทั้งหมดนี้ได้รับความอนุเคราะห์จากเพื่อนที่เป็นพ่อมดที่ C ++