一个简单的动态链接库的生成和调用例子,太过简单,大神请绕道。

一、创建动态链接库

  1. 使用vs创建工程选择动态链接库。

  2. 在项目中创建源文件和头文件,并在文件中添加以下代码。

  3. 在头文件中添加以下代码

    // dlltest.h   头文件,使用动态链接库时需要包含头文件
    
    #pragma once
    #ifdef __DLLEXPORT
    #define __DLL_EXP _declspec(dllexport) // 导出函数 - 生成dll文件时使用
    #else
    #define __DLL_EXP _declspec(dllimport) // 导入函数 -使用dll是使用
    #endif // __DLLEXPORT // 判断是否是c++
    #if defined(__cplusplus)||defined(c_plusplus)
    extern "C"
    {
    #endif
    __DLL_EXP int add(int a, int b);
    __DLL_EXP int sub(int a, int b); #if defined(__cplusplus)||defined(c_plusplus)
    }
    #endif
  4. 在源文件文件中添加以下代码

    // dlltest.cpp
    
    #include<stdio.h>
    #include"dlltest.h"
    #include"pch.h" int add(int a, int b)
    {
    return a + b;
    } int sub(int a, int b)
    {
    return a - b;
    }
  5. 在工程属性,C/C++ => 预处理器 => 预处理定义 中添加预定义宏__DLLEXPORT.

  6. 在工程属性,C/C++ => 预编译头 => 预处编译头 选择不使用预编译头。

  7. 编译生成dll文件和lib文件(如果没有生成lib文件,需要在工程中添加一个Source.def文件,内容为LIBRARY)。

二、使用动态链接库

1. 使用c++调用动态链接库

  1. 新建一个c++工程,包含dlltest.h头文件,并引用生成的lib文件。

  2. 添加源文件testcpp.cpp,在源文件中输入以下代码:

    #include <iostream>
    #include"dlltest.h" int main()
    {
    printf("test cpp\n");
    std::cout << "Hello World!\n";
    printf("3+2 = %d\n", add(3, 2));
    printf("3-2 = %d\n", sub(3, 2));
    }
  3. 编译,运行即可调用上面生成的动态链接库。

2.使用c调用动态链接库

  1. 新建一个c语言工程,包含dlltest.h头文件,并引用生成的lib文件。

  2. 添加源文件testc.c,在源文件中输入以下代码:

    // testc.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    #include <stdio.h>
    #include "dlltest.h" int main()
    {
    printf("test c\n");
    printf("3+2 = %d\n", add(3, 2));
    printf("3-2 = %d\n", sub(3, 2));
    }
  3. 编译,运行即可调用上面生成的动态链接库。

C++创建和使用动态链接库的更多相关文章

  1. 创建和使用动态链接库 (C++)

    创建和使用动态链接库 (C++) 转载:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx 此分步演练演示如何创建用于 C++ 应用的动态链接库 ...

  2. 【转载】创建和使用动态链接库 (C++)

    原文:http://blog.csdn.net/handforcpp/article/details/3478254 也可参考MSDN: 演练:创建和使用动态链接库 (C++) 我们将创建的第一种类型 ...

  3. VS2010创建和调用动态链接库

    当我们开发一个产品的时候,我们并不想把源码公布给对方,除了给对方提供exe可执行文件外,我们还可以生成动态链接库,供程序调用,方便二次开发. 下面我将简单梳理一下如何创建和调用动态链接库,方便大家程序 ...

  4. 演练:创建和使用动态链接库 (C++)

    我们将创建的第一种类型的库是动态链接库 (DLL). 使用 DLL 是一种重用代码的绝佳方式. 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它 ...

  5. vs2010创建和使用动态链接库(dll)

    本文将创建一个简单的动态链接库,并编写一个应用台控制程序使用该动态链接库,并提出了与实现相关的几个问题,供初学者交流. 本文包含以下内容: 创建动态链接库项目 向动态链接库添加类 创建引用动态链接库的 ...

  6. Qt创建和使用动态链接库

    一.创建共享库 1.新其他建项目,选择C++库 2.选择共享库,并取项目名称,单击下一步.这里取名位mylib 3.按默认配置单击下一步至模块选项,选择所需支持的模块.这里勾选Qtcore和QtGui ...

  7. vs2010 C++创建和使用动态链接库(dll)

    一.用C++创建动态链接库项目:  1.打开Microsoft Visual Studio 2010,选择File->New->Project.  2.在NewProject中选择Inst ...

  8. VC++ 6.0如何创建与调用动态链接库

    原文:http://blog.csdn.net/wanghaihao_1/article/details/51098451 1.静态链接库与动态链接库区别: 静态链接库:lib中的指令被直接包含在最终 ...

  9. Windows下VS2013创建与使用动态链接库(.dll)

    一.创建动态链接库文件 ** 1.打开VS2013,选择文件,新建工程  2.选择新建W32控制台应用程序,这里将工程名改为makeDLL  3.在应用程序类型中选择DLL,点击完成  4.完成以上步 ...

随机推荐

  1. String.format()详细用法

    String.format()字符串常规类型格式化的两种重载方式 format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字 ...

  2. git 版本找回方法

    在 git reset --hard 之后,git 的版本会回退. 这个时候,需要使用 git reflog 去查看之前的操作 然后, 找到相对应的 hash 数值. git reset --hard ...

  3. WebGL第一步

    什么是WebGL? WebGL使用了GLSL ES(OpenGL ES)着色器语言,通过配合调用js相关的绘制接口来实现3D效果. 采用页面中的<canvas>元素来定义绘图区域,canv ...

  4. GSON工具类

    import java.util.Map; import com.google.gson.reflect.TypeToken; import com.google.gson.FieldNamingPo ...

  5. [Bayes] Concept Search and LSI

    基于术语关系的贝叶斯网络信息检索模型扩展研究 LSI 阅读笔记 背景知识 提出一种改进的共现频率法,利用该方法挖掘了索引术语之间的相关关系,将这种相关关系引入信念网络模型,提出了一个具有两层术语节点的 ...

  6. html5画界面常用标签整理

    0.顶部一张banner图片横铺 .tl-header{ width: 100%; height: auto; } <section class="tl-header"> ...

  7. Linux安全学习

    安全游戏说明 游戏形式帮助初学者学习和实践网络安全,主要是Linux shell命令的练习. https://overthewire.org/wargames/ 二进制 灰帽黑客进阶秘籍之一--lin ...

  8. .Net Core 1.1打包发布到Linux

    在 .Net Core 1.0 中我们打包跨平台包是在 project.json 中配置的 但是 .Net Core 1.1 去掉了 project.json 具体咋办参考:https://blogs ...

  9. rest_framework框架——版本控制组件

    API版本控制可以用来在不同的客户端使用不同的行为.REST框架提供了大量不同的版本设计. 版本控制是由传入的客户端请求决定的,并且可基于请求URL,或者基于请求头. rest_framework 当 ...

  10. day38——线程queue、事件event、协程

    day38 线程queue 多线程抢占资源 只能让其串行--用到互斥锁 线程queue 队列--先进先出(FIFO) import queue q = queue.Queue(3) q.put(1) ...