iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
自我挑戰組

C# 和 SQL 探索之路系列 第 19

Day 19: C# 引用第三方程式: DLLImport

  • 分享至 

  • xImage
  •  

大家好,來到快要沒稿的第 19 天 (!?),介紹 dllimport 屬性。

這個屬性是搭配外部 DLL 使用的。當今天拿到合作客戶或廠商的 DLL,而且 DLL 是以 C++ 撰寫時,沒有辦法像一般的 C# 程式一樣,加入專案參考後就能使用內建的方法。此時就要用 dllimport 來呼叫。

Note: 這篇為簡單的範例,實務上通常要仰賴廠商提供的使用手冊,才能知道如何呼叫 DLL 內的函式。

以下用 Visual Studio 2022 做示範。

  1. 建立 C++ 的 DLL 專案。

https://ithelp.ithome.com.tw/upload/images/20220930/20152154S5uYcuOLWH.png

  1. 為專案命名。

https://ithelp.ithome.com.tw/upload/images/20220930/20152154tbRFvVcDWZ.png

  1. 專案屬性可以保持預設值。

https://ithelp.ithome.com.tw/upload/images/20220930/201521540k8w5CO5b0.png

  1. 加入以下程式碼。
extern "C" {
    __declspec(dllexport) int __cdecl Add(int a, int b);
}

extern int __cdecl Add(int num1, int num2) {
    return num1 + num2;
}

https://ithelp.ithome.com.tw/upload/images/20220930/20152154JnWI25pp9P.png

  1. 建置,並從 C++ 專案目錄下的 x64\Debug (或自行設定的路徑) 底下複製產生的 DLL 檔至 C# 的 bin\Debug 下 (或自行設定的路徑)。

https://ithelp.ithome.com.tw/upload/images/20220930/20152154UrUj2aLV1m.png

  1. C# 內呼叫的程式碼如下:
static class AddSharp
{
    internal static class UnsafeNativeMethods
    {
        const string _dllLocation = "DllExample.dll";
        [DllImport(_dllLocation)]
        public static extern int Add(int a, int b); // 宣告 C++ 內的方法
    }

    public static void Execute(){
        Console.WriteLine(UnsafeNativeMethods.Add(5, 10)); 
    }
}
public void Run(){
    AddSharp.Execute();
}

範例程式碼 (C#)
範例專案 (C++)

若有正確執行的話,應該可以看到命令列顯示計算結果 (15)。

參考資料


上一篇
Day 18: C# 事件 (Event) 進階
下一篇
Day 20: C# 引用第三方程式: 動態載入、反射 (Reflection)
系列文
C# 和 SQL 探索之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言