windows编程中加载DLL的两种典型方式的比较
文章目录
- DLL定义
- 头文件定义
- CPP实现
- DLL的调用代码
- 直接使用
- 通过LoadLibrary调用
- 导入表的依赖
- LoadLibrary使用DLL库中的类
- DLL中定义工厂函数
- 调用时的代码
- 补充:为什么LoadLibrary不能直接导出类
在windows的编程中,使用DLL是一个非常常见的操作。一般来说,有两种集成DLL的方式:
- 在IDE中集成DLL依赖,直接调用
- 使用系统API LoadLibrary动态加载DLL,然后通过获取指定名字的函数来调用。
这两种方式的几个比较明显的区别就在于:
-
是否往加载DLL的exe文件的导入表中写入依赖信息,这个就会导致exe是否在启动时就检查对DLL文件的依赖。
-
还有一个重要的区别就在于,如果使用LoadLibrary加载的话,导出的DLL中的类无法被直接使用,需要定义一个工厂类的函数来创建类。
-
IDE应该对函数的命名做了转换,在LoadLibrary方式的时候,通过GetProcAddress的时候,如果导出函数没有定义extern "C"对函数命名没有约束的时候会找不到(参考之前讲extern "C"的文章)。
no code,no BB,用代码来看一下这个依赖的情况。
DLL定义
头文件定义