前言:
我这里所谓的静态链接,指通过包含dll的头文件与lib文件从而引用dll中的函数,变量和类的一种方法。
要使用这种方法需准备两份头文件:一份用于dll工程,声明dll中的函数,变量和类将从dll中导出“__declspec(dllexport)”。一份用于可执行文件工程,声明了有一些函数,变量和类是从dll中导入的“__declspec(dllimport)”。1、既然是DLL(Dynamic动态),为什么还“静态”链接?
这种方式的链接过程令我疑惑。我不明白既然是dll文件为什么还要链接lib文件?本来构造dll的目的是通过动态地加载以减少可执行文件的容量。这样一做是不是有违dll的初衷?
我想到一种解释,就是所要包含的lib文件中并没有实质的代码,代码仍旧在dll中。那么这个lib里到底有什么?为什么要引入他?2、可执行文件是如何寻找dll文件的?
在头文件中并没有包含dll文件的具体路径,可执行文件在加载执行时如何找到所需要的dll文件?
我这里所谓的静态链接,指通过包含dll的头文件与lib文件从而引用dll中的函数,变量和类的一种方法。
要使用这种方法需准备两份头文件:一份用于dll工程,声明dll中的函数,变量和类将从dll中导出“__declspec(dllexport)”。一份用于可执行文件工程,声明了有一些函数,变量和类是从dll中导入的“__declspec(dllimport)”。1、既然是DLL(Dynamic动态),为什么还“静态”链接?
这种方式的链接过程令我疑惑。我不明白既然是dll文件为什么还要链接lib文件?本来构造dll的目的是通过动态地加载以减少可执行文件的容量。这样一做是不是有违dll的初衷?
我想到一种解释,就是所要包含的lib文件中并没有实质的代码,代码仍旧在dll中。那么这个lib里到底有什么?为什么要引入他?2、可执行文件是如何寻找dll文件的?
在头文件中并没有包含dll文件的具体路径,可执行文件在加载执行时如何找到所需要的dll文件?
用#ifdef
#endif就可以写在一个头文件里面了。