首页 > 编程语言 >c#和c++数据交互二

c#和c++数据交互二

时间:2024-08-15 11:28:42浏览次数:11  
标签:c# c++ int long byte 交互 public

1:新建c++模板,生成类型动态库
2:c++里类型

点击查看代码
class A
{
public:
	int a;	
};
typedef struct 
{
	   int up;
	  
	   int down;
	   char infos[4];
	//LPWSTR infos;
}info,*LPinfo;
3:c++声明动态库方法
点击查看代码
#define CVAPI  extern "C"  __declspec(dllexport) 
CVAPI  int Add1(int a,int b ,int len);

对应c#
[DllImport(Dllpath, CallingConvention = CallingConvention.StdCall)] 
public static extern int Add1(int a,int b ,int len);

4:c++ 接收c#函数
点击查看代码
//定义函数模型
int _declspec(dllexport)_stdcall FuncCsharp(int*);
回调
int CallBackAdd(int a, intptr_t callBack)
{ 
    decltype(FuncCsharp)* callHander = NULL;
    if (callBack != 0)
    {
        callHander = (decltype(FuncCsharp)*)callBack;
    }
    int b = 6;
    if (callHander != NULL)
    {
         b = callHander(&a);
    }
    return b;
}

c#使用
   [DllImport(Dllpath, CallingConvention = CallingConvention.StdCall)]
   public static extern int CallBackAdd(int a, IntPtr strPtr);
 public delegate int CsharpCall(ref int a);
 CsharpCall c = new CsharpCall(CsharpMethod);
 IntPtr ptr = Marshal.GetFunctionPointerForDelegate(c);
 var p2 = ptr.ToPointer();
var val=CallBackAdd(5, ptr);

5 基础数据类型对应

点击查看代码
c#                                 c++
int,short,byte,long                int,short,byte,long
ref int,short,byte,long            int*,short*,byte*,long*
结构体c#里是托管类型,在封送时需要注意以下特性
  
   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
   [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
 public static extern int StringToChar([MarshalAs(UnmanagedType.LPStr)] string str);

标签:c#,c++,int,long,byte,交互,public
From: https://www.cnblogs.com/MachineVIsion-w/p/18360553

相关文章

  • 深入解析Spring Boot中的@ConfigurationProperties注解
    深入解析SpringBoot中的@ConfigurationProperties注解在SpringBoot框架中,配置管理是一个核心功能。SpringBoot提供了多种方式来处理外部配置,其中@ConfigurationProperties注解是一个非常强大且灵活的工具。本文将深入探讨@ConfigurationProperties注解的概念、用法、工......
  • OpennCV
    一、介绍OpenCV(opensourcecomputervisionlibrary)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和......
  • Springmvc -- 使用`@RequestParam`接收数组类型参数
    在SpringMVC中,处理数组类型的请求参数是一个常见需求,尤其是在处理表单数据或查询参数时。SpringMVC提供了多种方式来接收数组类型的请求参数,包括使用@RequestParam注解、直接绑定到方法参数、以及使用@ModelAttribute注解。本文将深入探讨这些方式的用法、优缺点以及如何......
  • 深入解析Spring MVC中静态资源的放行配置
    深入解析SpringMVC中静态资源的放行配置在现代Web应用开发中,静态资源的处理是一个重要环节。静态资源包括HTML、CSS、JavaScript、图片等文件,它们不需要服务器进行动态处理,直接由客户端浏览器请求并渲染。SpringMVC提供了多种方式来配置和管理静态资源,确保这些资源能够被......
  • 【A GUIDE TO CRC ERROR DETECTION ALGORITHM】 (译文2)
    6.AFullyWorkedExample一个完全可行的例子HavingdefinedCRCarithmetic,wecannowframeaCRCcalculationassimplyadivision,becausethat'sallitis!Thissectionfillsinthedetailsandgivesanexample.定义了CRC算法后,我们现在可以将CRC计算简单地......
  • docker 安装 mysql
    docker安装MySQL命令软件的共享目录统一在 /mydata 目录下安装mysql5.7版本 #docker拉取镜像命令dockerpullmysql:5.7#宿主机新建目录mkdir-p/mydata/mysql/conf/#启动一个临时的mysql容器dockerrun-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD=root......
  • 【Leetcode 594 】 最长和谐子序列 —— 这是假的滑动窗口吧!
    和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。示......
  • 短剧CPS系统搭建全攻略:从零到一,详细教程助你快速上手
    目录一、短剧cps是什么?二、短剧cps系统搭建教程1.前端开发2.后端开发4.自动化与持续集成5.数据分析与监控三、部分代码展示 一、短剧cps是什么?短剧CPS系统是一种基于短剧推广的收益分成平台。该系统集成了短剧内容展示、用户观看、付费购买、佣金分成等功能,......
  • C++:命名空间与输入输出
    目录前言一、命名空间1.1namespace的价值1.2namespace的定义1.3命名空间的使用二、C++输入&输出前言   C++是一种面向对象的计算机程序设计语言,‌它扩展了C语言的功能,‌并引入了面向对象编程的概念,‌如类、‌继承和多态等,C++是以C语言为基础进行了拓展与创新,C......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务阶段4】任务阶段1、2、3链接一、实现任务阶段1-编写自己Spring容器,实现扫描包,得到bean的class对象二、实现任务阶段2-扫描将bean信息封装到BeanDefinition对象,并......