一個很簡單很簡單的教學,順便刷刷存在感。

 

 

 

首先,我們先來準備dll的部分 (C)

 

[DLL]

Step1. 檔案→新增→專案→選擇VisualC++ Win32專案,名稱為:ForCSharpCall

Step2. 然後→選擇dll和空專案。

Step3. 按完成。

 

這個時候,你可以看到的是一個全新的空專案,什麼也沒有,

然後呢,在寫Code之前,我們先來對這個專案做一些設定。

 

Step4. 對專案按下右鍵→Property→在General裡面,我們找到Common Language Runtime support這一個選項

 

我們將他改成這樣,如果說不改的話,咱們的C#就無法順利呼叫了。

 

 

Step5.開始Coding

 

準備一個.h檔(ForCSharpCallDefine.h)

準備一個.cpp檔 ( 去實現這幾個function的操作 ) (ForCSharpCallImplement.cpp)

 

接下來,我們準備一個連接檔 !!

連接檔這玩意很重要 !

連接檔這玩意很重要 !

連接檔這玩意很重要 !

因為很重要,所以我copypaste了三次 ! 為什麼重要 ?

因為連接檔這玩意是 " 連接 dll和 ui 的地方 "

少了這個,你就不能呼叫DLL。(等於自廢武功和人戰鬥一樣)。

 

 

ForExternCall.cpp

#ifdef FORCSHARPCALL_EXPORTS                     //同專案名稱,只是後面固定為_EXPORTS
#define FORCSHARPCALL_API __declspec(dllexport)  //請注意!正確的是Export要亮起 
#else
#define FORCSHARPCALL_API __declspec(dllimport)
#endif

#include "ForCSharpCallDefine.h"

 
//可以將class的物件宣告在外面變成全域
//Calculate cal;
extern "C" FORCSHARPCALL_API int Add(int a, int b)
{
    Calculate cal;//宣告在function內,只有該function能使用
    return cal.Addition(a, b);
}

extern "C" FORCSHARPCALL_API int Sub(int a, int b)
{
    Calculate cal;
    return cal.Subtraction(a, b);
}

extern "C" FORCSHARPCALL_API int Multi(int a, int b)
{
    Calculate cal;
    return cal.Multiplication(a, b);
}

extern "C" FORCSHARPCALL_API float Div(int a, int b)
{
    Calculate cal;
    return cal.Division(a, b);
}

 

 

以上都完成後,我們就按下建置(Ctrl+Shift+B)

-------------------------------------------------------------

 

 

 

 

 

 

這樣我們的DLL就生成拉,接下來,我們準備C#專案,

為了方便Demo,所以建了主控台應用程式 (Console Application),

然後專案名稱我們就命名為TestCSharpCallCLib_Console

 

這邊呢,有一個重點,就是

麻煩請自己手動寫一下,不然你會發現,你無法使用DLL

 

接下來就是程式碼的部分

class Program
    {
        [DllImport("E:/temp/ForCSharpCall.dll", EntryPoint = "Add")]
        private static extern int add(int a, int b);
        
        [DllImport("E:/temp/ForCSharpCall.dll")]
        private static extern int Sub(int a, int b);

        [DllImport("E:/temp/ForCSharpCall.dll", EntryPoint = "Multi")]
        private static extern int mul(int a, int b);

        [DllImport("E:/temp/ForCSharpCall.dll", EntryPoint = "Div")]
        private static extern float div(int a, int b);
 
        static void Main(string[] args)
        {
            Console.WriteLine(add(10, 20));
            Console.WriteLine(Sub(10, 20));
            Console.WriteLine(mul(10, 20));
            Console.WriteLine(div(10, 20));
            Console.ReadKey();
        }
    }

 

如此,搞定。

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()