参考文章http://blog.csdn.net/jadeflute/article/details/5684687

但是这里面第一个方案我没有测试成功,第二个方案我感觉有点复杂。

然后自己写啦一个:

第一:c++ 方法的结构数组参数设置为指针,指向第一个元素的地址。定义结构体。

typedef struct 

{
float X; float Y; }Point_2F;
extern "C" __declspec(dllexport) bool GetPoints(char *s,Point_2F *arr);
for(int i=;i<4;i++)//在方法体内赋值
{
Point_2F f;
f.X=i+1;
f.Y=i+2;
arr[i]=f;
}

第二:c#调用声明c++方法时,设置传入的参数为指针类型,也就是IntPtr。定义结构体。

    [StructLayout(LayoutKind.Sequential)]
public struct Point_2F
{
public float X;
public float Y; };
[DllImport("dll名子", EntryPoint = "GetPoints", CallingConvention = CallingConvention.Cdecl)]
static extern bool GetPoints(string s, IntPtr arr);//错误应该返回byte类型
    Point_2F[] arrP = new Point_2F[];
arrP[] = new Point_2F();
arrP[].X = ;
arrP[].Y = ;
IntPtr ptr = System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(arrP, );//获取地址
bool ret = GetPoints(s, ptr);//数值里面值发生改变。

这样是不是简单点呢?不知道这样是否存在其他问题,比如操作系统环境,还有其他我没想到的。

(PS:中间有一个错误,就是C++中bool占一个字节,C#中bool占4个字节,所以C声明方法应该返回byte类型。)

当然也可以有个变通的方案.不用new来申请数组 用stackalloc
比如Point_2F* array = stackalloc Point_2F[2];//这个是要求在c#非安全代码的上下文的
这样可以直接在栈区申请数组并获得指针(类似C语言的静态数组了...但是要考虑你这个对象的生命周期)

C#调用c++Dll 结构体数组指针的问题的更多相关文章

  1. C#引用c++DLL结构体数组注意事项(数据发送与接收时)

    本文转载自:http://blog.csdn.net/lhs198541/article/details/7593045 最近做的项目,需要在C# 中调用C++ 写的DLL,因为C# 默认的编码方式是 ...

  2. Delphi结构体数组指针的问题

    //这段代码在Delphi 2007和delphi 7下是可以执行的,所以正确使用结构体数组和指针应该是这样的,已验证 unit Unit1; interface uses Windows, Mess ...

  3. C#调用C++DLL传递结构体数组的终极解决方案

    在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...

  4. 绝对好文C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文  http://blog.csdn.net/xxdddail/art ...

  5. C#调用C/C++动态库 封送结构体,结构体数组

    一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int ...

  6. C#调用C/C++动态库 封送结构体,结构体数组

    因为实验室图像处理的算法都是在OpenCV下写的,还有就是导航的算法也是用C++写的,然后界面部分要求在C#下写,所以不管是Socket通信,还是调用OpenCV的DLL模块,都设计到了C#和C++数 ...

  7. C语言结构体和指针

    指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 ...

  8. c 用指针操作结构体数组

    重点:指针自加,指向下一个结构体数组单元 #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...

  9. C语言 指向结构体数组的指针

    当结构体指针变量指向一个结构体变量数组的时候,此时指针变量的值就是结构体数组的首地址 关于如何定义结构体数组,和将结构体指针指向结构体变量数组,不是重点. 重点是,明白结构体指针的是怎么移动的, 我个 ...

随机推荐

  1. 高性能JavaScript 加载和执行

    前言 本章主要讲述如何加载脚本使得用户能有良好的用户体验,而核心内容就是JavaScript的异步加载.之前写过一篇不得不说的JavaScript异步加载,相似的内容就不多加描述,讲些不同的东西,主要 ...

  2. 【BZOJ1001】狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 7530  Solved: 1724[Submit][S ...

  3. TF-IDF

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或 ...

  4. DeviceFamily XAML Views(一)

    DeviceFamily Veiws 可以为特定的设备(Mobile.Desktop等)制作特定的XAML视图,这种方式可以完全定制XMAL和共享后台代码. 以 Mobile 和 Desktop 为例 ...

  5. 48-tree 命令总结

  6. python环境搭建-在Windows上安装python3.5.2

    在Windows上安装Python3.5.2 首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.5.2对应的64位安装程序或32位安装程序(网速慢的同学 ...

  7. 安装myeclipse10后破解时发现没有common文件夹

    今天重新安装了myeclipse10软件,然后在破解的时候发现安装目录下没有common,这是因为以前安装过myeclipse,卸载时没有完全清除,再次安装时,myeclipse会自动找到以前安装的c ...

  8. Java网络编程——UDP实例

    UDPSendDemo import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  9. [转]Java日期时间使用总结

    原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...

  10. Chrome DevTools good good study day day up

    Chrome DevTools 官方页面 https://developer.chrome.com/devtools