大家好我是Andy,目前來到了第四天,今天先來看一下Visual Studio動態連結函式庫的原始介面,以及做一個簡單的dll,應該很多人都知道這標題的梗?吧
順便說一下昨天晚上看了一下原價屋RTX3080的價格um.....
其他顯卡集體跳樓
香哇皂啊吃完吐泡泡(絕對不是暴斃的那種)
使用Visual Studio創建自己屬於自己的DLL
觀察程式在執行的過程中調用了哪些動態連結函式庫
https://visualstudio.microsoft.com/zh-hant/vs/
順便附上載點使用community 2019版本
我們來打開Visual Studio 2019看看她到底長怎麼樣子 (記得不要開到visual studio code每次我都開錯.....)
開啟了之後呢點選左上方的檔案>新增>專案
這邊基本上都是選擇 動態連結程式庫,點進動態連結程式庫就會看到這個畫面
這邊分別有兩個檔案一個是 dllmain.cpp另一個是 pch.cpp
進來之後我們可以先看輸出的模式
目前都會使用這個,顧名思義就是字面上的意思給偵錯的時候使用,執行速度較快方便偵錯
上面是偵錯的話那這個也是一樣,全部偵錯完畢沒有錯誤的時候就使用這個比較完整的輸出。
原諒我講廢話
匯出後都會在該專案的檔案內如果使用Debug就會看到Debug的資料夾,使用Release就會看到Release的資料夾
簡單來說這邊就是寫dll的cpp 剛開啟的時候會看到四個東西分別是
例如:在main.cpp中我們會使用LoadLibrary這個函數去抓取dll的文件,而通常這個是讀取第一次的時候使用
這也可以說是一個初始化的動作每個動作都會返回一個布林值分別是ture和false而在這個Process_attach如果沒有初始化成功的話會返回false而這時候系統就會自動跑Process_detach去清理那些沒有成功初始化的東西
而這個和前面的Process_attach很像但是他們不同的點是,第一次會執行Process_attach但之後第二次開始的時候都會執行這個
這裡是如果調用ExitThread來結束線程的時候,會通知所有的DLL去執行線程級的清理工作
這是初始化的也可以說是卸載動態連結資料庫,通常函數都是使用FreeLibrary(釋放函式庫),配合著LoadLibrary使用因為有加載才有釋放
我先給他三個函數在其中一個裡面丟一個Messagebox
再由這個dllmain.cpp使用extern函數去做對外宣吿,也就是說我如果我使用exe調用dll我只能抓得到ccc這個函數其他抓不到。
而這邊會看到這邊有顯示紅線,這邊不要緊張,是因為字元集中的Unicode字元集所造成的我們只要把他改成 使用多位元組字元集就可以了
在沒有紅線之後呢就可以建置
這樣子就生成第一個dll了,很簡單吧。
非常重要
**Messagebox("訊息",按鈕的模式)
按鈕的模式又分成 MB_OK,MB_OKCANCEL,MB_YESNO,MB_YESNOCANCEL
但是在這篇文章中我訊息的後面是文字框的標題
今天我們簡單介紹了visual studio 2019動態連結函式庫的介面以及dllmain裡面的四種載入和釋放的方式,也嘗試了第一次製作dll,下次我們來實際應用在exe檔案去呼叫他試試看吧!,我們明天見。