C/C++ 动态库动态加载完整工程示例代码
项目描述
本项目提供了一个完整的工程示例代码,展示了如何在C/C++中实现动态库的动态加载。代码涵盖了Windows和Linux平台下的动态库加载、卸载操作,并将这些操作封装成统一的API接口,集成在dllLoad.h
和dllLoad.cpp
文件中。
主要功能
- 动态库加载与卸载:
- 支持在Windows和Linux平台上加载和卸载动态库。
- 通过统一的API接口实现动态库的加载和卸载操作。
- 模块管理:
- 构建了一个注册类
RegisterM
,内置一个map
容器,用于装载加载的动态库模块。 - 提供模块索引功能,方便管理和查找已加载的动态库模块。
- 构建了一个注册类
- 类实例与函数地址获取:
- 从动态库模块中获取类实例或函数地址。
- 提供类实例的获取、删除以及函数地址的获取等功能。
- 动态库实现:
- 提供一个虚拟元类
MetaObject
,在动态库的cpp
文件中建立子类继承该类,实现具体功能。 - 在
cpp
文件中直接提供函数API,这些API函数不在头文件中声明,需要使用extern
关键字修饰。
- 提供一个虚拟元类
使用说明
- 编译与运行:
- 根据目标平台(Windows或Linux),使用相应的编译器编译项目。
- 运行生成的可执行文件,查看动态库加载与卸载的效果。
- API调用:
- 参考
dllLoad.h
和dllLoad.cpp
中的API接口,调用相关函数实现动态库的加载、卸载、类实例获取等功能。
- 参考
- 动态库开发:
- 在动态库的
cpp
文件中,继承MetaObject
类,实现具体功能。 - 使用
extern
关键字修饰函数API,确保在动态加载时能够正确获取函数地址。
- 在动态库的
注意事项
- 本项目代码适用于Windows和Linux平台,请根据实际需求选择合适的平台进行编译和运行。
- 在动态库开发过程中,确保函数API使用
extern
关键字修饰,以避免链接错误。
贡献
欢迎提交Issue和Pull Request,共同完善本项目。