一.Win32动态链接库

  1.制作的步骤:

  (1)新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型。

  (2)MyDll.h的内容如下:

以下是引用片段:
  extern "C" _declspec(dllexport) int sum(int a,int b);//本文所有的例子只有一个sum即加法函数。

  (3)MyDll.cpp的内容如下:

以下是引用片段:
  #include "stdafx.h" 
  #include "windows.h" 
  #include "MyDll.h" 
  BOOL APIENTRY DllMain( 
  HANDLE hModule, 
  DWORD ul_reason_for_call, 
  LPVOID lpReserved 
  ) 
  { 
  return TRUE; 
  } 
  extern "C" _declspec(dllexport)int sum(int a, int b) 
  { 
  return a+b; 
  }

  (4)编译之后产生了MyDll.lib与MyDll.dll两个文件。

  2.使用方法:

  (1).隐式调用法: 将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:

以下是引用片段:
  #include "MyDll.h" 
  #pragma comment(lib,"MyDll");

  (2).显示调用法:将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中包含头文件,如:

以下是引用片段:
  #include "MyDll.h"

  同时还需要在Project->Setting->Link->Object/library modules的框中增加MyDll.lib这个库。

  二.MFC动态链接库

  1.制作的步骤:

  (1)新建MFC AppWizard(dll)工程,工程名为MFCDll,选择Regular DLL using shared MFC DLL类型。

  (2)在生成的MFCDll.cpp文件后面增加下面几行:

以下是引用片段:
  int sum(int a, int b) 
  { 
  return a+b; 
  }

  (3)在生成的MFCDll.def文件后面增加如下:

以下是引用片段:
  sum @1 ;表示第一个函数是sum

  (4)编译后会产生两个文件MFCDll.lib,MFCDll.dll

  2.使用方法

  (1)隐式调用法: 将MFCDll.lib拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP文件中添加如下几行:

  //注意这里没有在MFCDll.h中声明函数,所以不能直接包含MFCDll.h来声明函数。

以下是引用片段:
  #pragma comment(lib,"MFCDll"); 
  int sum(int a, int b);

  //当然如果你的DLL中有很多函数,那可以另外写个MFCDll.h,包含所有的函数声明,然后直接将头文件包含进去

  (2)显示调用法:与Win32的调用方法一样,不需要#pragma comment(lib,"MFCDll");,但是需要在Project->Setting->Link->Object/library modules的框中增加MFCDll.lib这个库。

在VC中创建DLL文件的方法步骤的更多相关文章

  1. 极其简单的用JS在浏览器中创建下载文件的方法

    有这样一个需求,在js中动态创建一个页面,然后下载该页面为word文档,研究了一上午,最后发现实现起来如此简单. 在js中创建如下方法:(直接复制即可) function downloadFile(f ...

  2. vc中播放mp3文件的方法小结

    一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便. 1.      使用mci #include <windows.h> ...

  3. C# 创建Dll文件供程序调用方法

    C# 创建Dll文件供程序调用方法 使用C#创建动态Dll文件方法: 1.  在VS2017环境下,新建-项目-选择类库类型: 2. 新创建一个.cs文件(如test.cs),编写代码如下: usin ...

  4. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  5. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  6. 如何保护.net中的dll文件(防破解、反编译)

    如何保护.net中的dll文件(防破解.反编译) 2010-07-19 15:08 [小 大] 来源: 赛迪网 评论: 0 分享至:      百度权重查询 词库网 网站监控 服务器监控 SEO监控  ...

  7. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  8. [转载]解析WINDOWS中的DLL文件---经典DLL解读

    [转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...

  9. 无法删除DLL文件解决方法(转)

    手动解决dll文件无法删除的终极方法 手动解决dll文件无法删除的终极方法 相信大家都遇见过:在删除一些软件的时候弹出某某文件正在运行或磁盘写保护不能删除这样的报错提示吧.而常常删除不掉的都一些后缀为 ...

随机推荐

  1. 反射生成SQL语句入门

    今天我们来学习学习通过反射技术来生成SQL语句. 反射提供了封装程序集.模块和类型的对象.您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型.然后,可以调用类型的方法或访 ...

  2. JDK居然还有Server和Client模式

    JDK这货居然还分Server和Client版本,但经过观察,据说从1.7+版本开始这两者运行的区别已经逐步减少了.所以接下来的分析没啥意义. 参考: http://www.oracle.com/te ...

  3. QT 开发资料

    http://pan.baidu.com/s/1bntYkpx 密码: fgsa

  4. Iterative (non-recursive) Quick Sort

    An iterative way of writing quick sort: #include <iostream> #include <stack> #include &l ...

  5. 解决sdk manager下载非常慢或者下载失败

    有了sdk manager,打开它,想下载一些须要的东西总是会发现非常慢,然后就仅仅好慢慢等待,等待许久之后最后是失败了,这样就会非常麻烦,以下我总结总结,怎样解决这些问题,让你在分分钟下载好这些东西 ...

  6. 使用sun.misc.BASE64Decoder出错解决方案

    Access restriction: The type BASE64Decoder is not accessible due to restriction on required library ...

  7. [PHP] ubuntu16.04配置Lamp环境(搭建linux+apache+mysql+php7环境)

    reference : http://blog.csdn.net/Abyss_sliver/article/details/77621404 好久没有在Linux环境下进行开发了,比较常用的还是win ...

  8. JSP中解决中文乱码

    <%@ page language="java" contentType="text/html;charset=gbk" pageEncoding=&qu ...

  9. Java中使用Jedis操作Redis之二

    import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.J ...

  10. 第四章 mybatis批量insert

    批量插入sql语句: INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',& ...