動態庫(DLL/so)在項目中無處不在,但新手常卡在:
① C++ 名稱修飾:導出符號被編譯器修飾,外部無法按原名調用
② 重複加載/釋放:LoadLibrary/FreeLibrary 計數器管理不當導致崩潰或洩漏
③ 接口設計隨意,二進制兼容性差
制定統一規範,降低使用門檻:
約定:所有動態庫導出一個類對象,所有功能通過成員函數實現。
// 標準導出函數原型 extern "C" __declspec(dllexport) IMyInterface* AsInterfaceExport(); extern "C" __declspec(dllexport) void AsInterfaceDelete(IMyInterface*);
extern "C":禁用 C++ 名稱修飾,保證符號可被 C/C++/其他語言查找AsInterfaceExport:工廠函數,返回接口指針(實際指向具體實現類對象)AsInterfaceDelete:對應釋放函數,由 DLL 內部 new 對應 delete,避免堆不一致DynamicLoader 模板類,封裝 LoadLibrary/GetProcAddress/FreeLibrary以「導出類對象 + 純虛接口 + C 鏈接」為基石,構建穩健的動態庫生態。