c# 调用c++带有回调函数方法的实现

本文介绍如何在C++中使用C#的委托作为回调函数。通过定义特定的委托类型并在C++函数中传递这一委托,使得C++能够调用C#函数并将数据返回给C#进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:http://www.cnblogs.com/cssmystyle/archive/2012/03/15/2397524.html

目前正在做的一个项目,大部分数据来源都是通过调用c++函数得到的,此时就遇到一个这次要说的问题。

如c++函数有个定时器,会定时调用我们c#的某个函数并把数据传给c#,让c#把数据显示到界面上,在c++中有个回调函数指针的概念,只需要某个

函数在调用定时器函数时传入一个函数指针就能达到目的,但C#中没有函数指针的概念,我们该怎样来实现呢。

其实说到回调函数,大家应该能想到c#中的委托,虽然名字不一样,但在各自的语言范畴都能实现相似的功能。所以我们就可以大胆的尝试下,把c#中的委托传给

c++,看c++是否能够承认它就是回调函数。

首先用c++写一个带有回调函数的方法 Test,在此省略。

接着,在c#中调用,

如:

[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++传入数组参数时,必须得用[marshalAs(UnmanagedType.LPArray,SizeConst=8010)] 处理一下,相当于是告诉c++,c#传入的是一个长度为8010的数组类型,如果不写这句话的话,你回调函数接收到的参数将只有一条数据。

接下来看看怎样来调用:

在调用时,我们得先写一个接受c++传回参数的方法,即我们传入委托的实现方法。
private void CallBackFunction([marshalAs(UnmanagedType.LPArray,SizeConst=8010)]byte[] buffer,int count)
{
…//处理c++传过来的数据s
}
一切工作准备完毕之后,我们来进行最后一步操作把
public void GetData()
{
callback=CallBackFunction;
ReadMyVideo(“”,callback);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值