溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么創(chuàng)建動態(tài)庫C#調用

發(fā)布時間:2021-06-24 15:58:50 來源:億速云 閱讀:262 作者:Leah 欄目:大數據

這期內容當中小編將會給大家?guī)碛嘘PC++中怎么創(chuàng)建動態(tài)庫C#調用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

C++動態(tài)庫的修改

首先還是打開Cppdll.h的頭文件,我們在頭文件中定義一個回調函數

typedef int(*cb)(int, int);

然后在聲明的導出函數中加入調用的這個cb指針

extern "C" int Cppdll_API call_func(cb callback, int a, int b);

如下圖

C++中怎么創(chuàng)建動態(tài)庫C#調用

接著我們再在Cppdll.cpp的源文件中寫call_func的實現方法,方法也很簡單,就是先求出輸入的兩個int類型的數值的和與差,然后把這兩個值再做為回調參數的值傳回去。

int Cppdll_API call_func(cb callback, int a, int b)
{
    int c = AddCount(a, b);
    int d = abs(a - b);
    return callback(c, d);
}

C++中怎么創(chuàng)建動態(tài)庫C#調用

這樣C++的動態(tài)庫我們就已經完成了


C#的調用程序的修改

先寫C++動態(tài)庫的調用函數聲明

        [DllImport("Cppdll", EntryPoint = "call_func",
            CallingConvention = CallingConvention.StdCall)]

        public static extern int CallFun(Dllcallback dcb, int num1, int num2);

        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]

        public delegate int Dllcallback(int num1, int num2);

上面的Dllcallback是我們定義的回調函數,這里必須用委托的方式定義,下面的【UnmanagedFunctionPointer里的CallingConvention.Cdecl】這個是必須要寫上的,因為默認C++的指針都是Cdecl,如果這里不聲明后調用時會默認_stdcall,在動態(tài)調用dll函數的時候,提示Run-Time Check Failure #0 -The value of ESP was not properly saved across a function call.

C++中怎么創(chuàng)建動態(tài)庫C#調用

然后我們寫一個回調的方法

        public int Call(int a, int b)
        {
            textBox1.AppendText("回調函數第一個參數為:" + a + "\r\n");
            textBox1.AppendText("回調函數第二個參數為:" + b + "\r\n");
            return a + b;
        }

C++中怎么創(chuàng)建動態(tài)庫C#調用

最后在原來的按鈕事件最后接著寫調用C++動態(tài)庫的這個實現方法

textBox1.AppendText("調用C++動態(tài)庫call_func回調函數\r\n");
num = CallFun(Call, num1, num2);
textBox1.AppendText("得到兩個數相加:" + num + "\r\n");

C++中怎么創(chuàng)建動態(tài)庫C#調用

到這里C#調用程序的修改也已經完成了


運行一下程序看看效果

C++中怎么創(chuàng)建動態(tài)庫C#調用

上述就是小編為大家分享的C++中怎么創(chuàng)建動態(tài)庫C#調用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI