您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關C++中怎么創建動態庫C#調用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
C++動態庫的修改
首先還是打開Cppdll.h的頭文件,我們在頭文件中定義一個回調函數
typedef int(*cb)(int, int);
然后在聲明的導出函數中加入調用的這個cb指針
extern "C" int Cppdll_API call_func(cb callback, int a, int b);
如下圖
接著我們再在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++的動態庫我們就已經完成了
C#的調用程序的修改
先寫C++動態庫的調用函數聲明
[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,在動態調用dll函數的時候,提示Run-Time Check Failure #0 -The value of ESP was not properly saved across a function call.
然后我們寫一個回調的方法
public int Call(int a, int b)
{
textBox1.AppendText("回調函數第一個參數為:" + a + "\r\n");
textBox1.AppendText("回調函數第二個參數為:" + b + "\r\n");
return a + b;
}
最后在原來的按鈕事件最后接著寫調用C++動態庫的這個實現方法
textBox1.AppendText("調用C++動態庫call_func回調函數\r\n");
num = CallFun(Call, num1, num2);
textBox1.AppendText("得到兩個數相加:" + num + "\r\n");
到這里C#調用程序的修改也已經完成了
運行一下程序看看效果
上述就是小編為大家分享的C++中怎么創建動態庫C#調用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。