目录
解决cannot open file 'testDLL.lib'
解决 第三方库#include "stdafx.h"总是有红色波浪线
新建exe项目:
之前看公司的代码,发现代码的架构基本上是一个exe加上若干个dll组成的,今天跟领导导论了一下发现这种结构的代码有若干好处,所以今天记录一下怎么实现一个exe托若干dll在vs2015中怎么设置(公司用的就是vs2015,没办法我也想用vs2022).
第一步先新建一个exe项目
这里用控制台为例,注意一点就是要选择控制台这个选项,因为再新建dll的时候就不是选这个了,下一个项目就需要选择dll和这个不一样了。
新建DLL项目:
右击solution
添加 新新项目
这里选择DLL这个。
在testDLL 文件中写一个简单代码。
注意的是一定要在类后面加上__declspec(dllexport)这个声明,要是你使用的函数也要有这个。
在dll项目中添加一个头文件并写代码
在testDLL.h头文件写代码:
#pragma once
#include <iostream>
class __declspec(dllexport) TestHellWorld
{
public:
void printHello();
};
void __declspec(dllexport) FunctionPrintHEll();
在cpp文件写:
// testDLL.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "testDLL.h"
void TestHellWorld::printHello()
{
std::cout << "testEXEandDLL class hello world!" << std::endl;
}
void FunctionPrintHEll()
{
std::cout << "testEXEandDLL function hello world!" << std::endl;
}
写完dll代码先编译一下:
配置exe项目
然后再主函数中调用这个:
在调用之前先要配置一下项目,让主函数知道有dll这个东西。选择exe项目的配置
第一步包含头文件:
简单起见,我这里就用绝对路径了,最好使用相对路径
然后包含dll和lib的路径:
我这里exe和动态链接库都是编译的x64的所以选择路径的时候就是选择x64下Debug这个文件夹要是编译x86架构的直接选择Debug即可。当然也可以设置dll的输出文件夹这样工程会更好看,这里就不赘述了。
最后在包含lib文件:
从x64 拷贝一份名字即可:
保存设置;
在主函数中写入代码
// testEXEandDLL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "testDLL.h"
int main()
{
TestHellWorld th;
th.printHello();
FunctionPrintHEll();
return 0;
}
写完这个编译一下:
然后编译solution:
编程成功:
执行:
完美通过:
在DLL项目中添加第三方库:
-------------------------------20220401更新---------------------------------------------
今天想如果DLL中想调用一个第三方库怎么办于是乎就在工程基础上再添加了一个自己想写的第三方库。这次是纯源码,有头文件和源文件的,
于是就在dll项目中添加参数,
先添加好头文件,然后再工程中添加源文件即可。
选择添加现有项(第二个)
选择cpp文件即可。
这时候工程中就有了cpp文件。然后再代码中调用cpp中的函数即可。
解决cannot open file 'testDLL.lib'
我还发现啊,有时候编译soltion的时候有部分概率是找不到test DLL的后来我想了想,应该是有部分概率是先编译主函数,再编译dll文件,所以就找不到dll文件,类似于这样的错误
要是你手动先编译dll再编译exe是没问题的,
指定编译先后顺序
后来我发现是可以设置依赖项的,就是执行先编译那个,或者这个编译文件依赖那个dll库。这样再编译soltion就没有这种问题了,一遍过。
具体设置方法是:
选择第一个:
选择你要依赖的dll工程,上面的那个hell是我测试给这个程序打包的不用管,使用vs打包完就生成一个安装文件。这个就不展开说了,网上有好多,
转载VS工具--自己收藏用_波雅_汉库克的博客-CSDN博客
这是我看这篇博客自己试了试可以用的。
解决 第三方库#include "stdafx.h"总是有红色波浪线
还有个细节:
就是再添加第三方库的时候需要包含有头文件:#include "stdafx.h"
这个就是我写的第三方库
后来发现 #include "stdafx.h"总是有红色波浪线,我就从test DLL工程中复制了一个头文件放到第三方库中了。再编译就没有红色的线了。这个线编译的时候没错,但是看着不舒服。
至于#include "stdafx.h"这个头文件是干什么的据说是可以加快编译的。
#include "stdafx.h"的作用_萤火虫小Q的博客-CSDN博客
有需求可以看看这个。
多线程编译:
至于加快编译还可以再VS上设置多线程编译:
每个项目都可以设置多线程编译,这样也会快一点。
结果:
-----------------------------------------------------------------------------
总结:
这就是一个小demo并不是正经的软件工程,只不过是我觉得以后开发大型软件这么设计比较好,至于dll内部些什么以后再说,以后自己写软件,就按这个模式来,不管多小的软件,这个软件工程思想还是要有的,希望可以帮助有需要的人。