C#向C++传递集合

在C#中调用C++方法并传递集合参数时,可以定义结构体来封装数据。文章提供了一个示例,展示如何在C#和C++中创建结构相同但不包含引用类型的结构体,然后通过数组传递这些结构体给C++方法。C++方法能正确访问并处理这些结构体内的数据。

在使用C#调用C++的方法传参时,当要传递的参数是一个集合时,可以采用传结构体的方式,通过在C#和C++中同时声明结构相同的结构体,且结构体中的变量只能用基本类型,不能使用引用类型。下面代码说明

C#结构体

C#结构体   
    public struct PointInfo
        {
            public double x;
            public double y;
            public string info;
            public IntPtr ptr;//C#这边的指针类型  指代C++结构体中的指针类型
        }
//传递方式 
 
void testmethod()
{
    int ptcount=5;
    //声明结构体数组
    PointInfo[] points = new PointInfo[ptcount];
    int ptId=0;
    //往数组中加内容
   for(int i=0;i<5;i++)
    {
         PointInfo point = new PointInfo();
        point.x =i+1;
        point.y =i+2;
        point.info =i.ToString();
        points[ptId] = point;
        ptId++;
    }
    //调用C++方法
    CreateGeometry(points,ptcount);
}
      

//调用的C++方法
  [DllImport(@"引用库.dll", EntryPoint = "CreateGeometry",
CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public extern static int CreateGeometry(PointInfo[] pointArr, int pointCount );
C++接收
声明与C#等价结构体
typedef struct tagPointInfo
{
    double x;
    double y;
    const char* info;
    Geometry* geo;
}PointInfo;
//C++实现方法
引用库_API_C int CreateGeometry(const PointInfo* pointArr, int pointCount )
{
    for (int i = 0; i < pointCount; i++)
    { 
        double x = pointArr[i].x;
        double y = pointArr[i].y; 
        Geometry* geo= pointArr[i].geo; 
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值