1.创建dll项目
新建项目,选择“动态链接库(DLL)”,接着点击下一步。
然后配置新项目,项目名称我写的是“Dll3”,以及“将解决方案和项目放在同一目录中”那里打勾,接着点“创建”。注意记着位置,避免生成之后找不到
2.更改我们的头文件和源文件
上面创建完了之后,你会得到这样的头文件和源文件。
里面的内容分别是(里面原先的内容不重要哈,扫一眼就好)
接下来的就重要了
首先我们改源文件里的“pch.h”
将先前的“pch.h”里的内容删光光。换为我们需要的方程,这里用的例子如下(加减乘除)。
注意修改项目属性-> C/C++ -> 预处理器 ->预处理器定义,添加TESTDLLEXPORT
// pch.h
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#endif //PCH_H
#ifdef TESTDLLEXPORT
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
DLLEXPORT int add(int a, int b);
DLLEXPORT int minus(int a, int b);
DLLEXPORT int multiply(int a, int b);
DLLEXPORT double divide(int a, int b);
#ifdef __cplusplus
}
#endif
接着修改“pch.cpp”
将先前的“pch.cpp”里的内容删光光。换为我们需要的如下。
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
double divide(int a, int b)
{
double m = (double)a / b;
return m;
}
3.生成DLL文件,找到我们的DLL文件。
右键我们的项目,点击生成。
接着成功了,我们继续哈。至于为啥链接不一致,暂时先不管。
接着我们去我们的项目位置的那去找,我的是在“C:\Users\Administrator\source\repos\Dll3\Debug”,如图,(找不到的就去第一步那个位置那里的项目的debug目录里找,看生成dll文件)
到这里就算生成好了
你可能会碰到2个问题:
1、warning C4273: dll 链接不一致(上面的pch.h已经参考此方案解决)
解决方案如下:
在编译Dll文件的时候遇到dll 链接不一致的问题,头文件如下:
#ifdef TESTDLLEXPORT
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
DLLEXPORT void test();
#ifdef __cplusplus
}
#endif
将pch.h所有自动生成的代码删除,复制以上所有代码到pch.h中
虽然外部程序可以正常调用test();但链接不一致的根源是第一行TESTDLLEXPORT没有预定义
解决办法:项目属性-> C/C++ -> 预处理器 ->预处理器定义,添加TESTDLLEXPORT即可。
2、在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“
方法一:
注意将自定义的.cpp文件和.h文件需要添加进项目中
选择报错的.cpp或者.c文件,右键-属性-预编译头-不使用预编译头即可
参考网址:https://blog.csdn.net/KOBO_24/article/details/112040572