转自:http://blog.csdn.net/howard_liu1314/article/details/7862326

1.制作dll文件
    vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:MyDll。点击【OK】,【Next】,选择dll单选按钮,完成。
    vs2008会自动生成一些代码,不用管它。创建MyDll.h,代码如下
    MyDll.h 为了提高可用性,写了可回带值的函数供参考
    Cpp代码  收藏代码
        //MyDLL.h  
        extern "C" _declspec(dllexport) int Max(int a, int b);  
        extern "C" _declspec(dllexport) int Min(int a, int b);  
        extern "C" _declspec(dllexport) bool cim2scada(char* cimId, char** scadaId); 
     
    创建MyDll.cpp
    Cpp代码  收藏代码
        // MyDll.cpp : Defines the exported functions for the DLL application. 
        // 
        #include "stdafx.h" 
        #include"MyDll.h"  
        #include <iostream> 
         
        int Max(int a, int b)  
        {  
            if(a>=b)return a;  
            else  
                return b;  
        }  
        int Min(int a, int b)  
        {  
            if(a>=b)return b;  
            else  
                return a;  
        }   
         
        bool cim2scada(char* cimId, char** scadaId){ 
            char *result; 
            if(cimId == NULL){ 
                printf("空指针!"); 
                return false; 
            }else if(strlen(cimId) == 0){ 
                printf("cimId无值!"); 
                return false; 
            } 
         
            if(strcmp(cimId, "aaaaaa") == 0){ 
                result = "1000"; 
            }else if(strcmp(cimId, "bbbbbb") == 0){ 
                result = "2000"; 
            } 
            *scadaId = result; 
            printf("fun scadaId:%s\n", *scadaId); 
            return true; 
        } 
    
    编译一下,到工程的DEBUG目录,就可以找到MyDll.dll文件
2.创建测试程序  --- 动态加载DLL

vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:DllTest。点击【OK】,【Next】,选择console单选按钮,去掉“预编译头”默认勾选项,完成。
    Cpp代码  收藏代码
        #include "windows.h" 
        #include <iostream> 
         
        void main(){ 
            typedef int(*pMax)(int a, int b);   //定义个函数指针pMax指针指向int XX(int  a, int b)这样一个类型的函数
            typedef int(*pMin)(int a, int b);  
            typedef bool(*pcim2scada)(char* cimid, char** scada); 
            HINSTANCE HDLL;  
            HDLL=LoadLibrary(L"MyDll.dll");//加载动态链接库MyDll.dll文件;  
            pMax Max=(pMax)GetProcAddress(HDLL,"Max");  
            pMin Min=(pMin)GetProcAddress(HDLL,"Min");  
            pcim2scada cim2scada=(pcim2scada)GetProcAddress(HDLL,"cim2scada");  
            int a = Max(5, 12);  
             
            char cimId[] = "aaaaaa"; 
            char * scadaId = ""; 
            bool b = cim2scada(cimId, &scadaId); 
         
            printf("Max结果为%d",a);  
            printf("cimId:%s, scadaId:%s", cimId, scadaId); 
            FreeLibrary(HDLL);//卸载MyDll.dll文件;  
        } 
    
    编译一下
    拷贝MyDll.dll文件到DllTest项目的Debug目录下
    打开一个控制台(cmd),进入DllTest > Debug目录,运行DllTest.exe
    输出结果:
    Cpp代码  收藏代码
        fun scadaId : 1000 
        Max结果为12 
        cimId:aaaaaa, scadaId:1000

=====================================================================================================
这里总结一下vs2008下创建dll并使用dll导出函数的方法,当然方法还有很多,找出一个自己比较习惯的方法就好!
一:生成DLL
1:创建DLL工程

文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)
      填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。
      到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。
      MyDLL.cpp内容如下:

#include <iostream>
    using namespace std;
    #include "MyDLL.h"
    
    int Add(int &a,int &b)
    {
        return a+b; 
    }

MyDLL.h内容如下:

#pragma once
    #define DLL_EXPORT __declspec(dllexport)
    extern "C" DLL_EXPORT int Add(int &a,int &b);
     点击生成,则dll文件就生成了,vs2008不能直接生成lib文件,这个时候就需要我们在建立dll工程的时候 再新建一个def文件,默认生成然后重新生成就能够得到lib文件了

2:调用DLL文件导出的接口函数 ----静态加载DLL

vs2008这个IDE非常好用,我们这里玩一下,在上面创建的DLL工程中,再新建一个项目来直接调用DLL导出函数。
       右键解决方案->添加->新建项目->建立一个空的常规工程 testMyDLL,下面新建两个文件testMyDLL.cpp和testMyDLL.h

testMyDLL.cpp内容如下:

//静态加载DLL需要把生成DLL的时候产生的LIB文件跟DLL文件还有头文件一起放在需要调用的工程中,这样就可以直接使用DLL中的函数。

#include "testMyDLL.h"
    #pragma comment(lib,"..\\debug\\MyDLL.lib")
    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a =3;
        int b =2;
        cout<<Add(a,b)<<endl;
    
        getchar();
    }

testMyDLL.h内容如下:

#pragma once
    #define DLL_EXPORT __declspec(dllexport)
    
    extern "C" DLL_EXPORT int Add(int &a,int &b);
这里需要注意testMyDLL.cpp文件中调用lib的这句话:

#pragma comment(lib,"..\\debug\\MyDLL.lib")

这里需要指明lib所在的文件夹,当然我们也可以在生成dll的MyDLL工程中,指定lib和dll文件的输出路径,直接到testMyDLL工程下。

使用vs2008制作dll文件,生成动态链接库相关推荐

  1. vs2008制作dll笔记

    本文参考http://leongod.iteye.com/blog/1104575 使用vs2008制作dll文件,生成动态链接库,采用显示加载,以下记录实现过程: 1.制作dll文件 vs2008中 ...

  2. 如何用VB制作DLL文件

    1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块名字为mytestdll  2.类模块内容只有一个函数,主要返回DLL的HELLO WORLD  Public Functi ...

  3. VS2019制作DLL文件

    用VS2019制作DLL文件的一般步骤很简单: 1创建新项目 2找到动态链接库DLL项目 3创建 4.分别在源文件和头文件添加相关函数f.cpp,f.h 第4步中,f.cpp中是没有主函数的各个函数, ...

  4. vs 2017 制作Dll文件的两种方法,以及调用Dll文件的两种方法。

    近来学习制作Dll文件,看了几个视频教程,看了网上的例子,看了msdn上的例子.现在做个总结,以便来日回顾,同时也希望以大家相互交流学习. 注意1:用 method 1 named "Usi ...

  5. Sandcastle是微软提供的一个根据XML注释和DLL文件生成帮助文件的工具

    2019独角兽企业重金招聘Python工程师标准>>> Sandcastle是微软提供的一个根据XML注释和DLL文件生成帮助文件的工具,目前是在CodePlex上的一个开源项目,可 ...

  6. dll文件的c++制作dll文件的c++制作

    dll文件的c++制作 1.首先用vs2005建立一个c++的dll动态链接库文件,这时, // DllTest.cpp : 定义 DLL 应用程序的入口点. // #include "st ...

  7. 创建并使用自己的DLL文件(动态链接库)

    本文创建一个实现一些数学函数的DLL.然后,创建一个控制台应用程序,使用DLL中的函数.您还将获得一些在窗口动态链接库中使用的编程技术和约定的介绍. 本文任务: 1.在Visual Studio中创建 ...

  8. c++由动态库dll文件生成lib文件的方法

    很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...

  9. dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总

    MinGW gcc 生成动态链接库 dll 的一些问题汇总 https://blog.csdn.net/liyuanbhu/article/details/42612365 网络上关于用 MinGW  ...

最新文章

  1. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5
  2. PYTHON2.day03
  3. Hacking techniques automation
  4. linux下shell脚本论文,Linux下Shell脚本编程
  5. 你知道source map如何帮你定位源码么?
  6. requests-session类对象-0223
  7. 【java】窗口和流的应用
  8. animate inater插件_maya插件管理器(Plug-in Manager),MAYA
  9. nachos操作系统初步认识
  10. php中adodb中文手册,[转载]ADODB中文手册(4)
  11. 无线路由器密码破解-BT3-spoonwep2 (转http://www.ylmf.net/read.php?tid=1483881)
  12. 数据库设计阶段 各阶段的任务
  13. Hive—日期格式使用总结
  14. USB快充5V-9V输入升压给16.8V四串锂电池充电板,芯片方案-37号电路板
  15. 个人博客网站搭建-WordPress-NameSilo-云左虚拟主机
  16. 你真的理解二分的写法吗 - 二分写法详解
  17. 广告术语(持续更新...)
  18. Placing Lampposts ,UVa 10859 树形dp
  19. 前端复习记录(前端基础 JavaScript)一
  20. discuz论坛图片无法显示之图片流问题

热门文章

  1. 计算机二级考试公网入口和教育网入口,考试入口
  2. win 通过 Distro 安装 linux 子系统
  3. [linux] maven
  4. SlashData开发者工具榜首等你而定!!!
  5. 服务器跑项目,如何使用远程服务器跑项目
  6. Linux lolcat输出彩色格言
  7. Excel从手机号和座机号混合文本中提取手机号码
  8. Ubuntu18安装截图工具flameshot
  9. Java 进程启停及诊断 Jarboot大改版、焕然一新
  10. matlab论文答辩题目,毕业设计答辩评及参考题目.doc