VC++6.0如何创建与调用动态链接库(dll)

VC++支持的DLL:

DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。 

导出函数的声明方式: 

一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。 

另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下: 

LIBRARY 库工程名称 

EXPORTS 导出函数名 

DLL的调用方式: 

一种静态调用,由编译系统完成对DLL的加载和应用程序结束时DLL的卸载。 

另外一种动态调用,由编程者用API函数加载和卸载DLL(DLL加载—DLL函数地址获取—DLL释放)方式。 

示例: 

一、 函数—-创建动态链接库(MFC规则DLL) 

1. New–projects–MFC AppWizard(dll)–Regular DLL using shared MFC DLL //取名为MFC_dll 

2. def文件中添加:函数名(Add_new) 

3. h文件中添加:外部函数声明//求和函数,函数名为Add_new 

extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b); 

4. cpp文件中添加: 外部函数实现 

extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b) 

{

  return a+b;

5. build–set active configuration–win32 release–ok 

6. 生成 

7. 根目录下release文件夹中dll,lib与根目录下h文件即为所需

 

二、 函数—-调用动态链接库(把MFC_dll.dll和MFC_dll.lib拷到工程所在目录) 

//静态调用(.h可以写到.cpp文件中) 

1. new–projects–win32 console application–an empty project 

2. 添加h文件:(test.h) 

#pragma comment(lib,”MFC_dll.lib”) //告诉编译器DLL相对应的lib文件所在路径和文件名 

extern “C”_declspec(dllimport) int _stdcall Add_new(int a,int b);//声明导入函数 

3. 添加cpp文件:(main.cpp) 

#include “test.h” 

int main() 

  cout<<Add_new(10,3); 

  return 0; 

}

 

//动态调用 

#include <stdio.h> 

#include <windows.h> 

typedef int (* lpAddFun)(int ,int);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型 

int main() 

  HINSTANCE hDll;//句柄 www.2cto.com 

  lpAddFun addFun;//函数指针 

  hDll=LoadLibrary(“dllTest.dll”);//动态加载DLL模块句柄 

  if(hDll) 

  { 

    addFun=(lpAddFun) GetProcAddress(hDll,”Add_new”);//得到所加载DLL模块中函数的地址 

    if(addFun) 

    { 

      int result=addFun(2,3); 

      printf(“%d”,result); } FreeLibrary(hDll);//释放已经加载的DLL模块 

    } 

  return 0; 

}

 from:http://www.2cto.com/kf/201112/112977.html

转载于:https://www.cnblogs.com/zhangmo/archive/2012/07/24/2607032.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁在窥屏_TheShy直播被窥屏搞怕了,为了防止被窥屏,这个做法绝了

前言&#xff1a;英雄联盟LPL赛区已经发展了十年&#xff0c;请你大胆试想下&#xff0c;如果终有一天英雄联盟会被其他游戏所淹没替代&#xff0c;让你选出自己心目中最强的游戏玩家&#xff0c;你的脑海里首先浮现的是谁的身影呢&#xff1f;笔者的脑海里首先是TheShy。TheSh…

前端学习(516):两列布局的第三种解决方案

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>第三种实现方案</title><style>.parent…

如何在Linux下安装nginx

如何在Linux下安装nginx 1.http://nginx.org 下载对应平台的安装初始配置文件 2.yum install nginxposted on 2012-07-25 15:41 ericyuan 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ericyuan/archive/2012/07/25/2608425.html

qchart 设置线颜色_实战PyQt5: 137-QChart图表之散点图

散点图(scatter chart)将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。在QChart中&#xff0c;使用类QScatterSeries创建散点图。QScatterSeriesQScatterSeries类在散点图中显示数据。散点数据在图表上显示为…

oracle19c xp安装 客户端_windows下安装oracle19c

目录&#xff1a;一. 官网下载oracle19c 以及客户端二.安装oracle19c1.解压安装压缩包在D盘新建文件夹oracle19c(注意&#xff1a;解压后的安装包不能为中文路径&#xff0c;且不要有空格这台特殊的&#xff0c;且数据库安装完成后安装包也不能删除。)。将WINDOWS.X64_193000_d…

调整latex表格_选择LaTeX还是Word的建议

如果对公式细节有很大的要求&#xff0c;比如公式字体、公式特殊格式&#xff08;透明&#xff0c;特殊文字&#xff09;有要求&#xff0c;只能用LaTeX&#xff0c;Word并不支持。还有一些及其专业的地方可能只有LaTeX能完成。有些大型期刊要求使用LaTeX模板那就只能服从要求了…

C#下如何实现服务器 + 客户端的聊天程序

最近也在接触SOCKET编程&#xff0c;在当今这样一个网络时代&#xff0c;很多技术都以网络为中心在诞生&#xff0c;至少我认为是这样的&#xff0c;而SOCKET套接字接口&#xff0c;在实现网络通讯上处于关键地位&#xff0c;所以不会SOCKET是不行的。首先&#xff0c;本文主要…

部署gogs_可以更快地查阅 Gogs 文档了!

# 可以更快地查阅 Gogs 文档了&#xff01;作为程序员&#xff0c;如何高效、准确地查阅文档是日常开发工作中的必备技能。长期以来&#xff0c;优秀开源项目的官方文档都是部署在国外服务器上&#xff0c;从国内访问非常慢&#xff0c;而由于众所周知的限制&#xff0c;部分文…

VC中使用ADO的方法

ADO中打开一个连接&#xff1a; pConnection->ConnectionString "这里的字符串有下面四种写法";      //对连接字符串赋值 pConnection->Open(ConnectionString,"","",adModeUnknown);       //连接数据库 第二三个参数分别为…

c++ mmap写入速度_Linux系统编程_用mmap+数组的方式修改数据文件

正文开始前&#xff0c;先聊点非技术的东西&#xff0c;推荐2本生动有趣的书&#xff1a;《经济学原理 宏观经济学》&#xff0c;曼昆&#xff0c;豆瓣评分9.3&#xff0c;4945人评价《经济学原理 微观经济学》&#xff0c;曼昆&#xff0c;豆瓣评分9.6&#xff0c;1879人评价我…

Java中类型转换

编辑器加载中... int -> String int i12345; String s""; 第一种方法&#xff1a;si""; 第二种方法&#xff1a;sString.valueOf(i); 这两种方法有什么区别呢&#xff1f;作用是不是一样的呢&#xff1f;是不是在任何下都能互换呢&#xff1f; String -…

太极软件qn的代码_多版本QQ内置qn、qx模块

软件名称&#xff1a;QQ版本号&#xff1a;1362、1392、1558版本&#xff1a;8.3.0、8.3.5、8.4.18安装包大小&#xff1a;81.93m、88.64m、100.93m简介&#xff1a;分别是830、835、8418这三个版本的QQ&#xff0c;只内置qn、qx模块&#xff0c;可以实现无需root&#xff0c;无…

asp.net 导入excel显示进度

这几天在做个导入excel的上传页面&#xff0c;由于数据量太大&#xff0c;要显示个进度条&#xff0c;本人不懂jquery&#xff0c;所以百度完再经过调整之后完成了&#xff0c;如果告诉别人只是为了显示个进度条而弄个多线程&#xff0c;还要根据session的机制模拟一个具有sess…

element form自定义校验_SpringBoot分组校验及自定义校验注解

前言在日常的开发中&#xff0c;参数校验是非常重要的一个环节&#xff0c;严格参数校验会减少很多出bug的概率&#xff0c;增加接口的安全性。在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法。而这篇则是介绍一些进阶的校验方式。比如说&#xff1a;在某…

javascript 栈 Stack

栈是只允许在表尾进行插入&#xff0c;删除的线性表。特点后进先出。 下面将演示用数组实现的栈 栈初始化&#xff1a;创建一个空栈 Init:function(){this.STACKMAX 100;this.stack new Array(this.STACKMACK);this.top -1;return this.stack; } 判断栈空&#xff1a; 若栈为…