转载:https://blog.csdn.net/zhunianguo/article/details/52294339

.def 方法

创建动态库方法:
创建动态库是生成 .dll .lib 两个个文件

文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator

应用程序类型:DLL  附加选项:空项目
 
建立源文件dllgenerator.cpp(不需要主函数,只写你需要动态调用的函数)
  1. // 整数加法和乘法
  2. int Add(int a, int b){
  3. return a + b;
  4. }
  5. int Mul(int c, int d){
  6. return c * d;
  7. }
建立头文dllgenerator.h(一定要把函数声明写好)
  1. int Add(int, int);
  2. int Mul(int, int);
建立源文件dllmain.cpp(一定要包含#include<windows.h>)
    - 下面的函数是VS2013自动生成,没生成复制即可。其实是在创建工程项目时不选空项目时候vs自动生成的,但不选空项目会产生很多其他文件和依赖项,本文教你建立最纯净的工程,注意包含window.h
  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include <windows.h>
  3. BOOL APIENTRY DllMain(HMODULE hModule,
  4. DWORD  ul_reason_for_call,
  5. LPVOID lpReserved
  6. )
  7. {
  8. switch (ul_reason_for_call)
  9. {
  10. case DLL_PROCESS_ATTACH:
  11. case DLL_THREAD_ATTACH:
  12. case DLL_THREAD_DETACH:
  13. case DLL_PROCESS_DETACH:
  14. break;
  15. }
  16. return TRUE;
  17. }
建立源文件Source.def
    - 建立方式如下图,选择 VisualC++ -> 模块定义文件(.def)
    - 在此文件第一行引号中填你的项目名称即可,EXPORTS下面列出要生成的函数名称 格式:“名称 @序号”)
  1. LIBRARY "DLLGenerator"
  2. EXPORTS
  3. Add @1
  4. Mul @2
 
点击菜单栏 生成 -> 生成解决方案 或者 按Ctrl+F5
输出栏显示 创建库 DLLGenerator.lib 和 生成 DLLGenerator.dll
 
lib文件里面有对dll文件的描述,所以生成的dll文件不要改名称,否则lib文件和dll文件无法对应
在项目方案目录里,Debug文件夹中可以找到DLLGenerator.lib 和 DLLGenerator.dll, 把这两个文件和工程的头文件(dllgenerator.h)移动到一个空文件夹(E:\dlltest\DLL)中,以后你的项目用到此dll就包含这个目录,至此动态库创建完毕。
 
 
项目调用动态库方法如下:
调用动态库是调用 .dll .lib .h 三个文件
文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLTestor

应用程序类型:控制台应用程序  附加选项:空项目
 
打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 包含目录 加入DLLGenerator.h所在目录的绝对路径 (E:\dlltest\DLL),以分号间隔
打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 库目录 加入DLLGenerator.lib所在目录的绝对路径 (E:\dlltest\DLL)
 
打开项目 -> 项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项 中填上DLLGenerator.lib(以分号间隔),点击右下角 应用 确定
 
工程调用dll时首先在工程文件目录中查找dll,找不到后在C:\Windows\System32 中找。所以我们自己项目简单调用dll时就把生成的dll文件复制到工程目录中,如果经常用可以把dll文件放到C:\Windows\System32中
 

新建源文件main.cpp
  1. #include<iostream>
  2. #include"dllgenerator.h"
  3. using namespace std;
  4. int main(){
  5. int a = 2;
  6. int b = 3;
  7. cout << Add(a, b) << endl;
  8. cout << Mul(a, b) << endl;
  9. }
点击菜单栏,调试 -> 开始执行(不调试)  或者按F5
运行结果:
至此调用动态库成功。

最新文章

  1. [原创]如何利用BI搭建电商数据分析平台
  2. php使用microtime(true)查看代码执行时间
  3. NOIP模拟赛20161114
  4. JS模块规范 前端模块管理器
  5. Java web 学习之旅
  6. Juicer javascript 模板引擎
  7. js调用asp.net 后台属性值
  8. block 的调用 简单代码
  9. gcc 简单编译流程
  10. [转载] HBase vs Cassandra:我们迁移系统的原因
  11. selenium环境配置
  12. 考研计算机复试(C语言复试笔试题)(精华题选)
  13. AXURE 8弄一个轮播图的步骤
  14. SQLyog简介及其功能(附百度云盘下载地址)
  15. iOS 抓包
  16. 利用EF和C#泛型实现通用分页查询
  17. html5 canvas从圆开始
  18. 迭代器模式(Iterator)
  19. GO语言 -- 调用DLL函数,填平所有的坑,最详尽攻略
  20. 【.Net】C#文本文件(.txt)读写

热门文章

  1. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇
  2. Unimrcp通过Vendor传递随路数据
  3. 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
  4. 整理最全的Android开发工程师面试题,面试题详解。java、Android程序员
  5. Unity Prefab关联
  6. RPC之总体架构
  7. vue实现局部预览打印
  8. vue 图片路径问题
  9. Java使用ArrayList实现“群主发红包”功能
  10. CSS3 RGBA 属性高级用法