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 用以下办法,解决了问题。

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

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.成功