原文:http://blog.csdn.net/wanghaihao_1/article/details/51098451

要成功地编辑,编译和链接一个动态链接库,应该包括以下要素:建立工程文件,使用输出说明,应用初始化函数和编制函数功能。

1.       建立工程文件

在选取类型的时候要选择“Dynamic __Link Library”或者“MFC AppWizard(DLL)”。

2.使用输出说明

对DLL要输出的函数或者变量必须进行明确的说明。方法有两种,第一种是使用扩展名为def的模块定义文件,将要输出的函数以及变量放在该文件的export部分:

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

EXPORTS

Function @1

Function @2

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

其中@1、@2是指输出顺序号。

另一种方法是使用扩展存储器属性__declspec(dllexport),这种方法的优点是无需使用单独的DEF文件,只需在函数说明以及原型前面加上__declspec(dllexport)即可。例如输出函数caller();

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

__declspec(dllexport) void caller(char *p);

__declspec(dllexport) void caller(char *p)

{

printf(“This is a caller”);

}

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

使用扩展贮存器属性说明的方法有不足之处,就是无法设定顺序号,无法说明私有属性,以及不便在说明中更改动态链接库的名称。

3.       应用初始化函数

DLL模块的调用和释放都是通过DllMain函数,所有的初始化和退出处理都是在这个函数中。如果不需要初始化和退出处理,可以不要这个函数,编译程序自动提供一个什么都不干的DllMain函数。DllMain函数的参数及结构如下:

DllMain(HANDLE hMoudle, DWORD fdwReason, LPVOID lpReserved)

这里函数名和参数类型都是固定的。函数根据fdwReason值来确定干什么,是初始化还是退出。

4.       编制功能函数

功能函数是指实现DLL要完成的功能的函数。它是一般的C、C++函数,只是要加上输出说明(如果要作为DLL输出函数的话)。

VC6.0创建DLL动态链接库四大要素的更多相关文章

  1. VC6.0编译DLL,使用VS2010调用问题及解决方法

    1.做驱动的时候.做应用程序须要和驱动通信,必须建立一个DLL. 2.由于客户使用版本号太低,须要使用到VC6.0编写DLL 3.在VC6.0上编写DLL的时候,导出的函数名会出现和原函数名不正确,导 ...

  2. vc6.0创建文件时,出现很多烫烫烫解决方法

    vc6.0创建文件时,出现很多烫烫烫烫解决方法 SWM2烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫.IA 如果项目文件放在桌面上 如:C:\Documents and Settings\txwtec ...

  3. 使用VC6.0创建和运行C程序的方法

    使用VC6.0可以有快捷的方式创建C程序,对于初学者,建议按照如下方式创建.先创建一个工作区,然后创建工程,最后在工程中创建源文件文件.理解工作区.工程与文件之间的关系.

  4. VC6.0 调试.dll文件

    对于自己制作的.DLL文件,一直没有比较好的调试方法,其实是知道的太少. 下面就说说VC6.0下面 怎么调试DLL文件: 首先得有一个调用DLL文件的可执行程序,然后调用这个可执行程序. 在工程上 右 ...

  5. 创建dll动态链接库,并使用java调用

    参考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html http://blog.csdn.net/g710710/article/details ...

  6. 创建DLL动态链接库——模块定义法(def)

    DLL模块定义法(Module-Definition File,即DEF):在VS家族IDE中,根据提示新增.def文件,如下: LIBRARY 关键字; mytestDll 库名; DLL_ADD ...

  7. 创建DLL动态链接库——声明导出法

    DLL声明导出法:是通过使用__declspec(dllexport),添加到需要导出的函数前,进行声明. 头文件定义如下(OPdll.h): 源文件定义如下(OPdll.cpp): 通过以上两个文件 ...

  8. # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库

    使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...

  9. DLL动态链接库导出函数方法 -- 动态导出(.def文件导出)

    简介 动态链接库最大的优势在于可以提供给其他应用程序共享的资源,最小化应用程序代码的复杂度,其中一个十分重要的功能就是dll可以导出封装函数的功能.导出函数有两种主要方式,分别是静态导入和动态导入,本 ...

随机推荐

  1. Sklearn,TensorFlow,keras模型保存与读取

    一.sklearn模型保存与读取 1.保存 from sklearn.externals import joblib from sklearn import svm X = [[0, 0], [1, ...

  2. HihoCoder - 1513 bitset处理五维偏序

    题意:给出\(n<3e4\)个有序组\((a,b,c,d,e)\),求对第\(i\)个有序组有多少个\(j\)满足\((a_j<a_i,b_j<b_i,c_j<c_i,d_j& ...

  3. Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)

    简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...

  4. js从后台取值并绑定到元素上

    用ajax从后台取值不是什么有技术含量的活计,把后台取来的值绑定到Vue对象上也不算难,但每一次向后台拿数据的时候都得写上这么一段代码就十分痛苦了. 于是我写了这么一小段js代码,能够自己根据url去 ...

  5. 3dsmax2013卸载/安装失败/如何彻底卸载清除干净3dsmax2013注册表和文件的方法

    3dsmax2013提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2013失败提示3dsmax2013安装未完成,某些产品无法安装,也有时候想重新 ...

  6. React 同构开发(二)

    React 同构 所谓同构,简单的说就是客户端的代码可以在服务端运行,好处就是能极大的提升首屏时间,避免白屏,另外同构也给SEO提供了很多便利. React 同构得益于 React 的虚拟 DOM.虚 ...

  7. Zookeeper概念学习系列之zab协议

    不多说,直接上干货! 上一章讨论了paxos算法,把paxos推到一个很高的位置. Zookeeper概念学习系列之paxos协议 但是,paxos有没有什么问题呢?实际上,paxos还是有其自身的缺 ...

  8. Visual Studio中判断项目的类型

    1. 打开项目的属性,查看Application的Output type

  9. a[i]==i[a]==*(i+a)==*(a+i)

    在C语言中,如果我们要访问一个数组的某个下标对应的元素,通常的写法是a[i].但从汇编的角度看,写成i[a]一点问题都没有. 下面通过代码给出证明. o foo1.c int main(int arg ...

  10. grep常用命令总结与基础正则

    grep 'str'用来选取含有str的行 参数: -v 反向选取 -n 显示行号 -c 计算查找到字符串的次数 -i 选取时不区分大小写 基础正则表达式符: [list] 从字符集合里选出任意一个字 ...