原文: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. 用Laya制作简单的动画

    (function () { var layaGameInit = window.layaGameInit || {}; var WebGL = Laya.WebGL; var Browser = L ...

  2. Linux之shell

    shell的中文意思是外壳. 通常在图形界面中对实际体验带来的差异不是不同发行版本的终端模拟器,而是shell这个壳. 壳在核外,shell里面的核就是linux内核. shell指的是:提供给使用者 ...

  3. apt 命令大全

    #1. 搜索包 sudo apt-cache search package #2.获取包的相关信息,如说明,大小,版本. sudo apt-cache show package #3.了解包的依赖 s ...

  4. eclipse 远程debug

    [环境参数] Eclipse:Version: Mars.2 Release (4.5.2) Linux:centOS 6.5 [简述] Java自身支持调试功能,并提供了一个简单的调试工具--JDB ...

  5. 1-----Docker实例-安装Nginx

    Docker 安装 Nginx 方法一.docker pull nginx(推荐) 查找 Docker Hub 上的 nginx 镜像 runoob@runoob:~/nginx$ docker se ...

  6. SpringCloud---消息驱动的微服务---Spring Cloud Stream

    1.概述 1.1 Spring Cloud Stream:用来   为微服务应用   构建   消息驱动能力的框架: 可基于SpringBoot来创建独立.可用于生产的Spring应用程序: 使用Sp ...

  7. revit 学习园地

    https://www.cnblogs.com/greatverve/category/286724.html

  8. RHCE 入门 第一篇

    随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训

  9. sencha touch textarea 手机上不显示滚动条,且不能滚动

    最近在项目中发现 sencha touch 中的 textarea 在手机上不显示滚动条,也不能滚动. 在浏览器中之所以能显示滚动条滚动,那是浏览器为 textarea 添加的滚动条. 但在手机中是不 ...

  10. js操作cookie的函数

    ///设置cookiefunction setCookie(NameOfCookie, value, expiredays) { var ExpireDate = new Date(); Expire ...