小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

c#調(diào)用c++帶有回調(diào)函數(shù)方法的實現(xiàn)

 ThinkTank_引擎 2015-01-30

在c++中有個回調(diào)函數(shù)指針的概念,只需要某個函數(shù)在調(diào)用定時器函數(shù)時傳入一個函數(shù)指針就能達到目的,但C#中沒有函數(shù)指針的概念,我們該怎樣來實現(xiàn)呢。
其實說到回調(diào)函數(shù),大家應(yīng)該能想到c#中的委托,雖然名字不一樣,但在各自的語言范疇都能實現(xiàn)相似的功能。所以我們就可以大膽的嘗試下,把c#中的委托傳給c++,看c++是否能夠承認它就是回調(diào)函數(shù)。

首先用c++寫一個帶有回調(diào)函數(shù)的方法 Test,在此省略。

接著,在c#中調(diào)用,如:

[DllImport("Test.dll",ChartSet.Ansi,EntryPoint="ReadMyVideo",ExactSpelling=false,CallingConvertion=CallingConvertion.StdCall)]

private static extern void Test(string fileName,CallbackDelegate callback);
接下來我們再定義一個委托:

public delegate void CallbackDelegate([marshalAs(UnmanagedType.LPArray,SizeConst=8010)]byte[] buffer,int count);

public static CallbackDelegate callback;
注:說明一下,在給c++傳入數(shù)組參數(shù)時,必須得用[marshalAs(UnmanagedType.LPArray,SizeConst=8010)] 處理一下,相當(dāng)于是告訴c++,c#傳入的是一個長度為8010的數(shù)組類型,如果不寫這句話的話,你回調(diào)函數(shù)接收到的參數(shù)將只有一條數(shù)據(jù)。

接下來看看怎樣來調(diào)用:

在調(diào)用時,我們得先寫一個接受c++傳回參數(shù)的方法,即我們傳入委托的實現(xiàn)方法。

private void CallBackFunction([marshalAs(UnmanagedType.LPArray,SizeConst=8010)]byte[] buffer,int count)

{

...//處理c++傳過來的數(shù)據(jù)s

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

public void GetData()

{

     callback=CallBackFunction;

    ReadMyVideo("",callback);

}
經(jīng)過驗證,委托就是c++要的回調(diào)函數(shù)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多