评论

收藏

[Hbase] 整个完整的项目打包成DLL详细版

数据库 数据库 发布于:2021-12-28 16:11 | 阅读数:330 | 评论:0

前言
之前对于dll的链接无非是抽象出来的公共方法,但是不知道的是,整个C++项目可以完整的打包成DLL文件,而且打包后然后新建项目在调用。

过程
打包环境:Visual Studio2019
步骤:打开Visual Studo2019,点击“文件”->“​​新建​​”->”​​项目​​”,选择“​​动态链接库​​”模板如下同,然后点击下一步,
DSC0000.png

在配置新项目栏目输入“​​项目名称​​”,选择“​​位置​​”,然后勾选中“​​将解决方案和项目放在同一目录中​​”,点击“​​创建​​”。
将解决方案中的pc.h文件编辑更改如下:
#ifndef PCH_H
#define PCH_H

#include "framework.h"
#endif 
#ifdef IMPORT_DLL
#else
#define IMPORT_DLL extern "C" _declspec(dllimport) 
#endif
IMPORT_DLL int pch();
将原来项目源代码中​​main.cpp​​​文件里面的代码替换原本的“​​pch.cpp​​​”文件,并​​include<pch,h>​​。
在Visual Studio2019中右击”​​解决方案​​​”->”​​在文件资源管理器中打开文件夹​​”。
然后选择原来项目源代码中带​​.h​​的头文件,将其复制到打开的文件夹中,在复制完在选中复制后的带.h的头文件将其复制添加到解决方案的头文件(注意:此处要保证复制的文件在打开的文件夹位置中,而非原来的原项目源码位置)。
同理,选择原来项目源代码中带​​.cpp​​​的头文件,将其复制到打开的文件夹中,在复制完在选中复制后的带​​.cpp​​的头文件将其复制添加到解决方案的源文件中。
操作完后,打开原来的​​pch.cpp​​​文件,按住Ctrl键点击自定义include的头文件,如果弹出警告”​​在当前源文件的目录或生成系统路径中未找到文件*.h​​​”时,请先点击确定关闭警告框。然后在解决方案的下一层目录(即以项目名为标志)处右击,点击“​​重新扫描解决方案​​”。再次测试时即解决这个警告。
最后”运行”,在本机中点击“​​本地Windows调试器​​​”,若提示错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“​​#include”pch.h​​​”,则点击Visual Studio2019中的“​​项目​​​”->“​​项目名属性​​​”->”​​C/C++​​​”->”​​预编译头​​​”,将右侧的预编译头由“使用(/Yu)”调换到“​​不使用预编译头​​​”,然后点击“​​应用​​​”->”​​确定​​”。
再次运行时即能正确运行,若输出显示” ​​========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========​​​”即为成功,此时会弹出错误框。”​​显示无法启动dll,dll不是有效的Win32应用程序。​​”,我们关闭即可,dll必须由其他程序调用。此时我们在项目目录中的Debug目录下找到生成的*.dll文件。
我们新建一个“​​控制台应用​​”程序,将默认带输出”Hello World!”的文件里面代码更改如下:
#include <iostream>
#include "Windows.h"
int main()
{
  HINSTANCE hDllInst;
  hDllInst = LoadLibrary(L"case1_part1_dll.dll"); //换成自身的dll文件名
  typedef int(*PLUSFUNC)(); //后边为参数,前面为返回值
  PLUSFUNC plus_str = (PLUSFUNC)GetProcAddress(hDllInst, "pch"); //GetProcAddress为获取该函数的地址
  std::cout << plus_str();
}
然后在Visual Studio2019中右击”​​解决方案​​​”->”​​在文件资源管理器中打开文件夹​​​”。将之前生成的​​*.dll​​​文件夹复制此,并将​​原项目的资源文件​​复制到此,若有其他资源文件依次操作即可。
然后点击“​​本地Windows调试器​​”,可以发现程序正常运行启动。
DSC0001.png


后记
更多关于DLL打包的问题可以相互交流沟通。






关注下面的标签,发现更多相似文章