参考:https://jingyan.baidu.com/article/ff42efa92c49cfc19e2202fd.html

和htps://jingyan.baidu.com/article/ff411625c7e60812e48237d5.html

和https://blog.csdn.net/baidu_30174103/article/details/80514925

一、首先遇到了VS2015一新建项目就出现未将对象引用设置到对象的实例的问题,参考:https://www.zhihu.com/question/37119592?sort=created 折腾半天,包括  打开--C:\Users\用户名\AppData\Local\Microsoft\VisualStudio\,然后把文件全部删了  也没解决。

VS2017-工具-导入和导出设置-重置所有选项 -重置为C++ 环境   依旧不行。

最后,参考:https://www.itsvse.com/thread-4221-1-1.html 用以下办法,解决了问题。

 、通过命令提示行工具进入VS安装目录下的Common7\IDE

、执行devenv.exe /setup /resetuserdata /resetsettings

、重启VS

二、正式编写DLL

1、VS2017     -    visual C++   -  windows桌面  -  动态链接库(DLL)  ,名称为Dll

2、在Dll.cpp中写以下代码

// Dll.cpp : 定义 DLL 应用程序的导出函数。
// #include "stdafx.h" extern "C" __declspec(dllexport) int __stdcall ADD(int a, int b) {
return a + b;
}

3、编译,成功。

4、找到VS自带的dumpbin,并加入到环境变量中。执行:dumpbin Dll.dll    ,结果没有看到函数名。

三、参考https://blog.csdn.net/Call_Coder/article/details/79331686 重新开始

1、Visual C++->Windows桌面->动态链接库DLL->起名字为first

2, 右侧 头文件->添加->新建项         ,选择头文件,起名字为first

3, 打开first.cpp源文件,内容改为:

// first.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "first.h"
#include <Windows.h>
#include <iostream>
using namespace std;
void show(void)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout << " 加";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
cout << "油";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << ",";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
cout << "给";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout << "自";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
cout << "己";
}

4、将first.h 头文件改为

#pragma once

__declspec(dllexport) void show(void);

5、生成解决方案。再次用dumpbin查看,和前面的一样?继续吧

6、新建一个C++控制台项目 test  ,把刚才的first.h和first.lib都复制到test的项目文件夹里,把first.dll放到最外边的那个Debug文件夹里

7, 在项目->属性->C/C++->代码生成->运行库->改成DLL(/MDd)然后,在右侧解决方案中的头文件中添加first.h 资源文件中添加first.lib

8、在test.cpp中写

#include "stdafx.h"
#include "first.h" int main()
{
show();
while (true)
{ }
return ;
}

重新生成解决方案,运行test.exe.成功

C++编写 动态链接库dll 和 调用dll的更多相关文章

  1. C++ 生成 dll 和调用 dll 的方法实例(转)

    1)生成dll 建立两个文件 xxx.h , xxx.cpp xxx.h内容如下: #ifdef BUILD_XXX_DLL#define EXPORT __declspec(dllexport)#e ...

  2. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  3. C#程序实现动态调用DLL的研究[转]

    摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...

  4. C#程序实现动态调用DLL的研究

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  5. java中调用dll文件的两种方法

    一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNativ ...

  6. 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】

    C#中dll调用方法   一.      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一, ...

  7. Java调用.dll文件

    因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档.在网上找到一个开源的组件JNativ ...

  8. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

    转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...

  9. C#中调用Dll动态链接库

    C#中调用Dll动态链接库 起始 受限于语言的不同,我们有的时候可能会用别人提供的函数及方法 或者其他的什么原因.反正就是要调!!! 恰巧别人所使用的的语言跟自己又不是一样的 这个时候想要调用别人的函 ...

随机推荐

  1. npm ERR! Cannot read property 'path' of null

    npm错误: 错误信息如下: $ sudo npm install -g bean-sdk sudo: npm: command not found $ npm install -g bean-sdk ...

  2. java——初识

    java是现在最火的高级编程语言之一,功能强,应用广. java可以做什么? 1. 开发桌面应用程序 2. 开发面向Internet的应用程序 开发java程序的基本步骤: 1. 编写源程序:mypr ...

  3. css重写checkbox样式

    一.前言 默认的checkbox长这样: <p> <span><input type="checkbox" /></span> &l ...

  4. 使用Linux的Crontab定时执行PHP脚本

    0 */6 * * * /home/kdb/php/bin/php /home/kdb/apache/htdocs/lklkdbplatform/kdb_release/Crontab/index.p ...

  5. Spring之AOP的注解配置

    配置过程可以简单的分为3步: 1,业务类配置 在业务类前加入,将业务类交由Spring管理 @Component("s") 这个表示,这个业务类的Bean名字为 s . 2,将切点 ...

  6. K8S helm

    Helm 致力于成为 Kubernetes 的包管理工具,可以方便地发现.共享和构建 Kubernetes 应用,它包含几个基本概念: Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜 ...

  7. 洛谷P3178 [HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...

  8. js调用摄像头

    详情源码请参见下方的 GitHub  !!! <div> <b>调用移动端摄像头</b><br> <label>照相机: <input ...

  9. Activiti实现流程自由跳转

    import org.activiti.engine.ProcessEngine; import org.activiti.engine.TaskService; import org.activit ...

  10. 运行 python *.py 文件出错,如:python a.py

    运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install  (h ...