首先需要有个头文件,名字随便写  假设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. Gmail账户安全冰山一角

    本文没有任何价值,只是一个事实的记录. 看到qq邮箱有个代理其他邮箱的功能,就好奇地输入了我的Gmail邮箱,结果代理不成功. 本来没care,后来gmail自己弹出来一封邮件. 后来我确认是本人所为 ...

  2. oracle学习总结4

    1:三范式a:一张表里必须要有主键,列不可分.b:如果一张表里面,两个字段作为主键,那么其他字段不能够部分依赖这两个字段. 2:pl sql:Procedural language(过程语言) 写一个 ...

  3. PV信号量的一些理解

    进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下:   进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作和信号量.其中信号量起 ...

  4. 3.x vector的用法

    #include<vector> //struct struct GOLD_STRUCT {     Sprite  * goldspSprite;     int goldValue; ...

  5. ASP防止盗链的一段代码

    <%@Language="vbscript"%> <% Response.Buffer = true Response.Expires = -1441 ' var ...

  6. MongoDB 的分组操作 In C#

    C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj   h ...

  7. JNI的一些使用

    1.简介 Java Native Interface(JNI) 有时候我们必须要调用本地代码c/c++来克服java中的内存管理和性能限制.java支持通过Java Native Interface( ...

  8. 爬虫遇到取到网页为reload的问题

    有的网站防采集,会在页面加上this.window.location.reload(),这时候你就会得到如下代码: <html>   <head>      <meta ...

  9. The method getContextPath() is undefined for the type ServletContext

    我出错时,到网上说得是版本问题,我找到对应的包javax-servlet5.1.12.jar,把它删了,居然不报错了,原来是和包servlet-2_5-api.jar冲突了

  10. eclipse导入包的快捷键

    在Eclipse里,写一个没有导入相应包的类名(这个类名已经完全写全,比如LayoutManager), 可以用ctrl+shift+M/Ctrl+Shift+o/Ctrl+1导入相应的包. 其中Ct ...