参考: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用户名AppDataLocalMicrosoftVisualStudio,然后把文件全部删了 也没解决。
VS2017-工具-导入和导出设置-重置所有选项 -重置为C++ 环境 依旧不行。
最后,参考:https://www.itsvse.com/thread-4221-1-1.html 用以下办法,解决了问题。
1、通过命令提示行工具进入VS安装目录下的Common7IDE 2、执行devenv.exe /setup /resetuserdata /resetsettings 3、重启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 0; }
重新生成解决方案,运行test.exe.成功