dlc.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef AFUN_DLC_H
  2. #define AFUN_DLC_H
  3. #include "aFunToolExport.h"
  4. #include "dlfcn.h" // CMake 处理 dlfcn.h 的位置
  5. /* 动态库工具(dlc): 处理动态库的使用 */
  6. /*
  7. * NEW_DLC_SYMBOL: 用于定义指定类型的symbol结构体
  8. * DLC_SYMBOL: 指定类型的symbol结构体名
  9. * GET_SYMBOL: 访问symbol成员的值
  10. * MAKE_SYMBOL: 生成一个symbol
  11. * COPY_SYMBOL: 拷贝一个symbol(拷贝其引用)
  12. * READ_SYMBOL: 在dlc中获取一个symbol
  13. * FREE_SYMBOL: 释放symbol
  14. *
  15. * openLibary: 打开动态库
  16. * freeLibary: 释放动态库
  17. * dlcExit: 释放所有动态库
  18. */
  19. #define DEFINE_DLC_SYMBOL(NAME) typedef struct DLC##NAME##SYMBOL *pDLC##NAME##SYMBOL
  20. #define NEW_DLC_SYMBOL(TYPE, NAME) typedef struct DLC##NAME##SYMBOL { \
  21. TYPE *symbol; \
  22. struct DlcHandle *dlc; \
  23. } DLC##NAME##SYMBOL, *pDLC##NAME##SYMBOL
  24. #define DLC_SYMBOL(NAME) pDLC##NAME##SYMBOL
  25. #define GET_SYMBOL(SYMBOL) (*((SYMBOL)->symbol))
  26. #define MAKE_SYMBOL(symbol, TYPE) ((pDLC##TYPE##SYMBOL) (makeSymbol_(symbol)))
  27. #define COPY_SYMBOL(ds, TYPE) ((pDLC##TYPE##SYMBOL) (copySymbol_((DlcSymbol_ *)(ds))))
  28. #define READ_SYMBOL(dlc, name, TYPE) ((pDLC##TYPE##SYMBOL) (getSymbol_((dlc), (name))))
  29. #define FREE_SYMBOL(symbol) ((symbol) != NULL ? (freeSymbol_((DlcSymbol_ *)(symbol)), NULL) : NULL)
  30. typedef struct DlcSymbol_ DlcSymbol_;
  31. typedef struct DlcHandle DlcHandle;
  32. AFUN_TOOL_EXPORT struct DlcHandle *openLibary(const char *file, int mode);
  33. AFUN_TOOL_EXPORT struct DlcSymbol_ *makeSymbol_(void *symbol);
  34. AFUN_TOOL_EXPORT struct DlcSymbol_ *copySymbol_(struct DlcSymbol_ *ds);
  35. AFUN_TOOL_EXPORT struct DlcSymbol_ *getSymbol_(struct DlcHandle *dlc, const char *name);
  36. AFUN_TOOL_EXPORT void freeSymbol_(struct DlcSymbol_ *symbol);
  37. AFUN_TOOL_EXPORT bool freeLibary(struct DlcHandle *dlc);
  38. AFUN_TOOL_EXPORT void dlcExit(void);
  39. #endif //AFUN_DLC_H