首页 > 编程语言 >C++回调C#方法

C++回调C#方法

时间:2023-10-11 17:34:12浏览次数:36  
标签:C# void len int C++ 回调 data public

在VC中封装的网络通信模块,在异步接收到数据时需要将内容传递给C#中的消息处理函数,于是便出现了如标题所说的情况。

    C++的回调函数中有一个参数,是处理接收到的字节流的回调函数指针,定义基本如下: 
   

     typedef  void  (*fpDataReceived)(char  *data  ,int  len); 

  

    其中char  *data是从DLL中返回的字节流,空间已经在DLL中分配了。
    下面是在C#中定义的委托 

        public  delegate  void  OnDataReceived(byte[] data,  int  len);  

  

    下面是C#中回调函数的实现 

        public  void  getData(byte[]  data,  int  len) 
        { 
            //结果这里data的维数只有1,也就是说只收到一个字节。 
        }

    问题解决如下:

    1、

using System.Runtime.InteropServices;

 

    2、按如下方式定义委托:
       

public delegate void OnDataReceived(IntPtr pData , int len); //pData是个指针地址,对应上面的char*指针data

    3、回调函数的实现如下:

        public void getData(IntPtr pData , int len)
        {
            byte[] data = new byte[len];
            Marshal.Copy(pData, data, 0, len); 
            //接着处理 data 里的内容
         }

 


https://blog.csdn.net/u013047803/article/details/77053112
https://blog.csdn.net/u014722754/article/details/107849062
https://blog.51cto.com/shunge/922744

标签:C#,void,len,int,C++,回调,data,public
From: https://www.cnblogs.com/suntroop/p/17757745.html

相关文章

  • 使用mapstruct做对象属性转换
    MapStruct是一个Java注解处理器,它可以自动生成类型安全的JavaBean映射代码。MapStruct的主要目的是简化JavaBean之间的映射,它通过注解来指定JavaBean之间的映射规则,然后自动生成映射代码。在MapStruct中,有几个常用的注解:@Mapper:用于指定一个JavaBean映射器接口,该接口定义......
  • C++ - 多线程之线程管理函数
    1.获取线程id函数get_id()的使用该函数在命名空间std::this_thread下。作用是获取当前线程的id。#include<iostream>#include<thread>usingnamespacestd;//No.1get_id()获取线程idvoidthreadFunc(){ cout<<"get_id()子线程id:"<<this_thread::get_id(......
  • C++ - 多线程之带返回值的线程处理函数
    1.使用async函数创建线程1.1使用步骤使用async函数启动一个异步任务(创建线程,并且执行线程处理函数),返回future对象通过future对象中get()方法获取线程处理函数的返回值1.2基本数据类型作为返回值#include<iostream>#include<thread>#include<future>using......
  • C++ - 多线程之线程同步
    1.多线程的并发问题线程间为什么需要同步?直接来看一个例子:inta=0;voidfoo(){ for(inti=0;i<10000000;++i) { a+=1; }}intmain(){ clock_tstart,end; start=clock(); threadt1(foo); threadt2(foo); t1.join(); t2.join(); end=clock();......
  • pageoffice多用户同时在线编辑word文档
    转载:多用户同时编辑多用户同时编辑注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。总体来说,各种Web系统中的Word文档在线处理大体可以分为以下四种流转处理方式:A用户编辑完,流转给B用户修改,再流转给C用户修改,直......
  • NOIP A层联测9 & CSP模拟52
    我的评价是三道傻逼题和一道牛逼题。T4上厕所时想了个奇怪东西打了一个半个小时170行结果剩10分钟发现假了,最后\(k=1\)都没来得及写就直接交了暴力。没想到HZOJ过了50pts,喜了。但是Accoders上只过了35pts,恼了。T1长春花\(b^2\bmodp=(b\bmodp)^2\bmodp\),所以......
  • OpenCL
    OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割的并行计算机制。1.OpenCL提供了并行计算的机制......
  • C++ - VS2019配置pthread线程库
    1.说明在VS里用MS编译器不能直接调用pthread库,需要先自行下载该库:http://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip解压后用的到的只有Pre-built.2文件夹下的文件。 2.配置如下图分别配置三大项:包含目录-->...pthreads-w32-2-9-1-release\Pre-......
  • 安防视频监控平台EasyCVR集成到ios系统不能播放是什么原因?如何解决?
    视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放......
  • C++ - TCP通信
    1.前言socket编程分为TCP和UDP两个模块,其中TCP是可靠的、安全的,常用于发送文件等,而UDP是不可靠的、不安全的,常用作视频通话等。如下图:1.1头文件与库:#include<WinSock2.h>​#pragmacomment(lib,"ws2_32.lib")1.2准备工作:创建工程后,首先右键工程,选择属性然后选择......