windows环境DLL链接问题之一:dllimport是必须的吗?

来源:互联网 发布:opengl shader编程 编辑:程序博客网 时间:2024/06/07 00:24

最近看了Windows核心编程中关于DLL链接的章节,遇到很多很多问题(唉 本人比较笨拙),在此做个小小笔记,也希望能帮到同是程序猿的你们!!

核心编程第十九章讲述了DLL隐含链接的内容,本人完全按照书上敲进去的测试代码,无奈总是编译出错,并且大多是unresolved external symbol问题,于是追根究底,用了一天半的时间看了C/C++修饰符问题,最后才明白,大多问题也都出在这里!

废话不多说,代码就是我们最好的语言啦!下面是我的测试程序的例子,例子也是摘抄的,但是修改了大部分,用的vs2008的IDE:

首先是Dll测试头文件:DllCom.h

源代码文件:DllCom.cpp

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DLL的测试文件就到这里啦!

代码中有些许注释,相信也能看的懂,回到我们的问题:dllimport是不是一直都是必须的呢

答案是:不是!

这个例子就能够很好的编译成DllCom.dll和DllCom.lib文件(只要DLL中有输出的变量或者函数,就会生成lib文件)!

根据核心编程中的描述,当可执行程序链接到一个函数或者变量时,它会查找经过C/C++规则生成的相应函数的修饰符,查找修饰符的过程就分为隐式链接与显示加载。

隐式链接:这里就用到了lib文件,通过使用__declspec(dllimport)关键字, 编译器预先知道你要引用的符号将从一个DLL文件的.lib文件引入,就能生成运行效率稍高的代码。

显示加载:LIB和DLL的区别与使用

看到这里,相信大家已经知道dllimport关键字的作用了吧!O(∩_∩)O哈哈~



原创粉丝点击