首先需要有个头文件,名字随便写  假设test.h

//test.h
#ifndef _TEST_H
#define _TEST_H #ifdef TEST_EXPORTS //通过宏定义控制是输入还是输出
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif TEST_API int find_max(int,int); //函数声明 #endif

然后要有一个和头文件对应的cpp文件,test.cpp

#define TEST_EXPORTS

#include "stdafx.h"
#include "test.h" int find_max(int a,int b)
{
return a>b?a:b;
}

至于dllmain.cpp,可以暂时不去管它。按F7编译,由于函数没有main()函数,不能执行,只能编译。

 

将生成的simplest_dll.lib和simplest_dll.dll以及test.h文件拷贝到需要调用该dll文件的工程目录下。

在测试工程中包含头文件test.h,并且使用隐式调用的方式实现dll内的函数的调用。

具体代码如下:

// TEST_simplest_dll.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "test.h"
#include <iostream>
using namespace std; //隐式调用dll文件
#pragma comment(lib,"simplest_dll.lib") //也可在 属性->配置属性->链接器->输入->附加依赖项 中进行添加*.lib文件
int _tmain(int argc, _TCHAR* argv[])
{
int a=10;
int b=100; int d=find_max(a,b);
cout<<"使用隐式调用的结果:"<<d<<endl;
return 0;
}

这样子就基本完成了一个简单的dll的创建和测试使用。

simplest_dll 最简dll的创建与隐式调用(显式调用太麻烦,个人不建议使用)的更多相关文章

  1. 动态链接库的生成(dll)和 动态链接库隐式and显式调用

    一.构建动态链接库(dll.dll dll.lib dll.h) 说明: .dll 是在执行程序是调用  .lib 是在连接程序是调用  .h是在编译程序时调用 1.头文件(声明导入函数):_decl ...

  2. C++ dll的隐式与显式调用

    应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息.Visual C++6.0(或者更先进的版本)在VC\bin目录下提供了一个名为 ...

  3. 动态链接库DLL的创建生成及调用

    一.背景 最近在做CANTOUSB底层驱动的调用,是调用别人已经封装好的库,看不到别人写的源程序.程序中调用的是隐式调用即 x.h+x.lib+x.dll,其中DLL即是动态链接库(Dynamic L ...

  4. 且看一文梳理VS2019中dll的创建使用

    动态链接库(dll) Windows下有静态链接(lib)库和动态链接库(dll)两种共享代码的方式. 本文将介绍dll的应用场景,以及在vs2019平台下的生成和使用. 今天的笔记内容说的是平时经常 ...

  5. windows c dll的创建与调用

    DLL代码: // TestDynamic.cpp: implementation of the TestDynamic class. // ///////////////////////////// ...

  6. 关于DLL的创建与使用简单描述(C++、C#)

    前言 前一段时间在学关于DLL的创建与调用,结果发现网络上一大堆别人分享的经验都有点问题.现在整理分享一下自己的方法. 工具 Microsoft Visual Studio 2017 depends ...

  7. QT创建与调用Dll方法(包括类成员)--显式调用

    看网上的好多关于QT调用Dll的方法,大部分都是调用函数的,并没有调用C++类成员的情况,即使是有,比如说: 使用Qt编写模块化插件式应用程序 Qt 一步一步实现dll调用(附源码)---(这一篇里没 ...

  8. Delphi中DLL的创建和使用(转)

    Delphi中DLL的创建和使用     1.DLL简介:   2.调用DLL:   3.创建DLL:   4.两个技巧:   5.初始化:   6.例外处理.            1.DLL简介  ...

  9. 分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F:\testProject\bin\test.test.DLL”或程序集“F:\testProject\bin \testProject.DLL”。请在类型名称中显式指定程序集。

    问题描述: RT 分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F:\testProject\bin\test.test.DLL”或程序集“F:\testProj ...

随机推荐

  1. 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)

    Problem A - Assemble Time limit: 2 seconds Recently your team noticed that the computer you use to p ...

  2. Android开发学习

    Android Studio中文社区:http://www.android-studio.org/ Android Studio官方网站地址:http://developer.android.com/ ...

  3. Android打包失败Proguard returned with error code 1. See console

    问题一: [2013-06-28 11:12:10 - ] Proguard returned with error code 1. See console [2013-06-28 11:12:10 ...

  4. jquery easyui combobox 级联及触发事件,combobox级联

    jquery easyui combobox 级联及触发事件,combobox级联 >>>>>>>>>>>>>>&g ...

  5. js 简易判断一个数字是否是小数

    参考:js验证输入是否是小数 我的方法是: //check the number is decimal number function checkDecimal(number){ if(!isNaN( ...

  6. JavaScript设计模式(一)

    使用JavaScript框架和库过程中, 我遇到过很多感觉上'奇形怪状'的代码. 大多数情况下, 按照惯例编写代码也能够写出很多出色的功能. 但是如果不从根本上理解它们实现的方法, 就没办法完全充分发 ...

  7. RabbitMQ 原文译02--工作队列

    工作队列: 在上一篇文章中我们我们创建程序发送和接受命名队列中的消息,在这篇文章我会创建一个工作队列,用来把耗时的操作分配给多个执行者. 工作队列(任务队列)的主要实现思想是避免马上执行资源密集型的任 ...

  8. SignalR 跨域设置

    参考文章:http://www.cnblogs.com/nywd/p/3691813.html 上一节,已经实现了,当前域内的通信,这一节中,介绍一下跨域的即时通信,既然要做,我们肯定要把这个推送及聊 ...

  9. Python阅读清单

    Python <零基础学Python(第二版)> 包括进阶 The Python Tutorial 绝对权威和主题丰富的官方教程 PEP 8 以及 PEP 257 编码风格/规范 PEP ...

  10. ASP.NET Web Service如何工作(2)

    ASP.NET Web Service如何工作(2) [日期:2003-06-26] 来源:CSDN  作者:sunnyzhao(翻译) [字体:大 中 小] HTTP管道一旦调用了.asmx句柄,便 ...