VS2017 把類導出成動態鏈接庫DLL並隱式調用的步驟及遇到的一些問題的解決辦法

把類導出成DLL和把函數導出成DLL 的方法類似,非常詳細的步驟見https://blog.csdn.net/weixin_43222324/article/details/94589140
這裏只說一下大概步驟:
(1)新建一個DLL項目
在這裏插入圖片描述
(2)在定義DLL 應用程序的導出函數 yourDLL(你自己取得名字).cpp裏,寫入類的聲明和定義,【重要:類的聲明前加 _declspec(dllexport)】,如圖:

class _declspec(dllexport) yourDLLname
{
//你的類裏面的函數聲明什麼的……
}

當然你也可以新建一個 yourDLL.h,把類的聲明放進 yourDLL.h,把類的定義放進yourDLL.cpp,這樣做更規範,這裏爲了方便就直接把聲明和定義放在一處了。

在這裏插入圖片描述
(3)運行程序,不過肯定運行不了的,這是DLL,不是可執行程序。
在這裏插入圖片描述
但已經生成成功了
在這裏插入圖片描述
打開工程目錄,成功生成了 .dll和.lib在這裏插入圖片描述
(4)把.dll和.lib拷貝到新工程目錄下,在新工程的資源文件裏添加.lib文件
在這裏插入圖片描述
在這裏插入圖片描述
(5)在新工程的主程序裏,寫上類的聲明,格式如圖:
class _declspec(dllimport) yourDLLname
{
// 你的那些公有函數、私有成員的聲明……
};

然後再main函數裏就可以直接使用這個類啦!
在這裏插入圖片描述
(6)運行效果
在這裏插入圖片描述

第二部分:在這個過程中遇到的一(很)些(多)問題。早在一兩個月前就已經會把函數導出成動態鏈接庫並隱私調用了,然後導出類的時候一直不成功,各種各樣的問題,在網上一頓搜索各種改動仍然不行,今天終於成功了!!!
問題(1):創建動態鏈接庫的時候,以爲 有.dll生成,沒有.lib生成。
如圖,我啷個曉得玫紅色圈住的這個這是 .lib???它莫得後綴名,它的類型是"Merge Pin Library File",也不像網上別人生成的那樣(下面圖二)是 “Object File Library”,我以爲“有.dll生成,沒有.lib生成”,照着各位博主講的辦法一頓操作,仍然沒有.lib生成。
在這裏插入圖片描述

在這裏插入圖片描述
我開始想,是不是這個"Merge Pin Library File"就是DLL的導入庫呢?就在網上搜"Merge Pin Library File"是啥,顯然啥也沒搜到。看了一篇文章,講的如何區分靜態庫和dll的導入庫(就是我想要的.lib),方法是在VS命令行裏輸入

lib /list  目錄\你的導入庫名.lib

顯示圖上黃色那一堆,那麼這個就是DLL的導入庫lib。
在這裏插入圖片描述
然後我就覺得這個"Merge Pin Library File"就是dll的導入庫了。我額外寫了個簡單函數來測試,發現用這個lib沒有問題,沒有成功導出類一定是別的地方出了問題。

問題(2)“main”使用未定義的 class“W_O_GNS”
在這裏插入圖片描述
我太蠢了,函數寫一句 void _declspec(dllimport) funcName(); 就可以調用了,我寫類也只寫了一句 class _declspec(dllimport) W_O_GNS;
當然不能這樣!函數寫一句,那就是函數的聲明,可是類的聲明要帶上類體啊,把整個類的聲明寫上,像下圖那樣就OK了。
在這裏插入圖片描述
目前的問題解決完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章