整個完整的項目打包成DLL詳細版

前言

之前對於dll的鏈接無非是抽象出來的公共方法,但是不知道的是,整個C++項目可以完整的打包成DLL文件,而且打包後然後新建項目在調用。

過程

打包環境:Visual Studio2019
步驟:打開Visual Studo2019,點擊“文件”->“新建”->”項目”,選擇“動態鏈接庫”模板如下同,然後點擊下一步,
在這裏插入圖片描述
在配置新項目欄目輸入“項目名稱”,選擇“位置”,然後勾選中“將解決方案和項目放在同一目錄中”,點擊“創建”。
將解決方案中的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.h”文件代碼的尾部,將原先的main函數名改爲pch函數名,使其缺少main入口函數。需要注意的是pch函數是我們爲項目提供的接口函數。

在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調試器”,可以發現程序正常運行啓動。
在這裏插入圖片描述

後記

更多關於DLL打包的問題可以相互交流溝通。

發佈了58 篇原創文章 · 獲贊 39 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章