天天看點

c#調用c++帶有回調函數方法的實作

在c++中有個回調函數指針的概念,隻需要某個函數在調用定時器函數時傳入一個函數指針就能達到目的,但C#中沒有函數指針的概念,我們該怎樣來實作呢。

其實說到回調函數,大家應該能想到c#中的委托,雖然名字不一樣,但在各自的語言範疇都能實作相似的功能。是以我們就可以大膽的嘗試下,把c#中的委托傳給c++,看c++是否能夠承認它就是回調函數。

首先用c++寫一個帶有回調函數的方法 Test,在此省略。

接着,在c#中調用,如:

接下來我們再定義一個委托: 

注:說明一下,在給c++傳入數組參數時,必須得用[marshalAs(UnmanagedType.LPArray,SizeConst=8010)] 處理一下,相當于是告訴c++,c#傳入的是一個長度為8010的數組類型,如果不寫這句話的話,你回調函數接收到的參數将隻有一條資料。 

接下來看看怎樣來調用:

在調用時,我們得先寫一個接受c++傳回參數的方法,即我們傳入委托的實作方法。

一切工作準備完畢之後,我們來進行最後一步操作把

經過驗證,委托就是c++要的回調函數。