iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0

昨天將動態連結函庫(DLL)編譯好之後,今天就來測試我們的動態連結函庫是否可用。要如何測試呢?今天會撰寫一個Windows Console Application來驗證動態連結函庫,會利用這個測試程式來示範如何將連結動態連結函庫到專案中,所使用的測試系統為B760 Pro RS/D4,此主機板使用的環控晶片為NCT6796D。

  • 選擇C++/Windows/主控台,用主控台應用程式建立專案,專案名稱為TestApp

  • Visual Studio會在來源檔案中自動產生出TestApp.cpp,將以下程式碼複製至TestApp.cpp中。

    #include <iostream>
    #include "SioSdk.h"
    
    using namespace std;
    
    int main()
    {
        bool result;
        unsigned int Speed = 0;
    
        result = Install();
        if (result) {
            result = Open();
            if (result) {
                Speed = GetCpuFanSpeed();
                cout << "CPU Fan Speed " << Speed << endl;
            }
            else {
                printf("Open file failed\n");
            }
        }
        else {
            printf("Install system file failed\n");
        }
        Close();
    
        return 0;
    }
    
  • 接著我們需要到屬性內設定相關路徑及設定,首先至C/C++>一般>其他Include目錄

  • 添加Day19所建立的動態連結函庫所在的目錄

  • 然後到連結器>一般>其他程式庫目錄,新增動態連結函庫的輸出目錄

  • 然後到連結器>輸入>其他相依性,新增SioSdk.lib

  • 設定完後就可以建置方案並按F5開始偵錯,但TestApp會產生錯誤如下:

  • 經查詢後得知此錯誤碼為:

ERROR_ACCESS_DENIED
5 (0x5)
存取遭到拒絕。

  • 因為我們的驅動程式為KMDF,需要使用管理者權限才能使用,要解決的話要到連結器>資訊清單檔>UAC執行層級,將其設定為requireAdministrator

  • 重新建置方案並偵錯,會彈出下列視窗,以管理者權限重新啟動Visual Studio

  • 重新啟動後再次偵錯,依舊產生錯誤並彈出錯誤訊息視窗如下:

  • 此錯誤碼為:

ERROR_PATH_NOT_FOUND
3 (0x3)
系統找不到所指定的路徑。

  • 因為動態連結函庫並沒有複製到TestApp輸出目錄中,需要到建置事件>建置後事件,把Day19建立的動態連結函庫複製到TestApp輸出目錄

    xcopy /y /d "..\..\SioSdk\$(IntDir)SioSdk.dll" "$(OutDir)"
    
  • 再次建置方案並偵錯,還是會跳出錯誤訊息:

  • 也是錯誤碼0x3,但這次是因為StartService找不到驅動程式。由於之後是使用Electron來呈現應用程式,動態連結函庫會使用Electron的路徑去開啟驅動程式,所以要再到建置事件>建置後事件中添加下方指令,建立資料夾並把Day15產生的驅動程式複製到TestApp輸出目錄

    if not exist $(OutDir)resources\lib mkdir $(OutDir)resources\lib
    xcopy /y /d "..\..\Sio\$(IntDir)Sio.sys" "$(OutDir)resources\lib"
    

  • 偵錯啟動,測試程式有順利結束並讀取到CPU風扇的轉速並印出。

經過測試程式的驗證,我們所獨立出來的驅動程式與動態連結函庫可以正確讀取CPU風扇轉速,之後就可以進入到前端應用程式部分。

參考內容

系統錯誤碼 (0-499) (WinError.h) - Win32 apps | Microsoft Learn
建立使用 DLL 的用戶端應用程式
TestApp - Repo


上一篇
Day19 使用I/O存取環控晶片-9
下一篇
Day21 Electron應用程式-1
系列文
Windows Driver + Electron 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言