C++编写 动态链接库dll 和 调用dll
参考: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的更多相关文章
- C++ 生成 dll 和调用 dll 的方法实例(转)
1)生成dll 建立两个文件 xxx.h , xxx.cpp xxx.h内容如下: #ifdef BUILD_XXX_DLL#define EXPORT __declspec(dllexport)#e ...
- C#程序实现动态调用DLL的研究(转)
摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...
- C#程序实现动态调用DLL的研究[转]
摘 要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...
- C#程序实现动态调用DLL的研究
摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...
- java中调用dll文件的两种方法
一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676 JNativ ...
- 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】
C#中dll调用方法 一. DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一, ...
- Java调用.dll文件
因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档.在网上找到一个开源的组件JNativ ...
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...
- C#中调用Dll动态链接库
C#中调用Dll动态链接库 起始 受限于语言的不同,我们有的时候可能会用别人提供的函数及方法 或者其他的什么原因.反正就是要调!!! 恰巧别人所使用的的语言跟自己又不是一样的 这个时候想要调用别人的函 ...
随机推荐
- 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 ...
- java——初识
java是现在最火的高级编程语言之一,功能强,应用广. java可以做什么? 1. 开发桌面应用程序 2. 开发面向Internet的应用程序 开发java程序的基本步骤: 1. 编写源程序:mypr ...
- css重写checkbox样式
一.前言 默认的checkbox长这样: <p> <span><input type="checkbox" /></span> &l ...
- 使用Linux的Crontab定时执行PHP脚本
0 */6 * * * /home/kdb/php/bin/php /home/kdb/apache/htdocs/lklkdbplatform/kdb_release/Crontab/index.p ...
- Spring之AOP的注解配置
配置过程可以简单的分为3步: 1,业务类配置 在业务类前加入,将业务类交由Spring管理 @Component("s") 这个表示,这个业务类的Bean名字为 s . 2,将切点 ...
- K8S helm
Helm 致力于成为 Kubernetes 的包管理工具,可以方便地发现.共享和构建 Kubernetes 应用,它包含几个基本概念: Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜 ...
- 洛谷P3178 [HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- js调用摄像头
详情源码请参见下方的 GitHub !!! <div> <b>调用移动端摄像头</b><br> <label>照相机: <input ...
- Activiti实现流程自由跳转
import org.activiti.engine.ProcessEngine; import org.activiti.engine.TaskService; import org.activit ...
- 运行 python *.py 文件出错,如:python a.py
运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install (h ...