C#获取C++中修改过的float数组(指针),dll
2013-11-03 16:29
459 查看
C++中
C#中
转一篇简单易懂的C++编写dll的文档http://wenku.baidu.com/view/ebb7e1edb8f67c1cfad6b867.html
struct rankPoint{ float sim; }; extern "C" __declspec(dllexport) int getRank(rankPoint prank[20000]){ for(int i = 0; i < 20000; i++) prank[i].sim = 0; for(int i = 0; i < 7; i++) prank[i].sim = i; return 0; }
C#中
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Runtime.InteropServices; namespace DllTest { [StructLayout(LayoutKind.Sequential)] struct rankP { public float mark; } public class Cpp { [DllImport("Cdll.dll")] public static extern int getRank(IntPtr p); } public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int size = Marshal.SizeOf(typeof(rankP)) * 20000; byte[] bytes = new byte[size]; IntPtr pBuff = Marshal.AllocHGlobal(size); rankP[] rBuf = new rankP[20000]; Cpp.getRank(pBuff); for(int i = 0; i < 20000; i++) { IntPtr pPointor = new IntPtr(pBuff.ToInt64() + Marshal.SizeOf(typeof(rankP)) * i); rBuf[i] = (rankP)Marshal.PtrToStructure(pPointor,typeof(rankP)); } int si = 0; //设置断点监测,的确修改了rBuf数组,也就是实现了数组的传递,只不过是通过结构体实现的 Marshal.FreeHGlobal(pBuff); } } }
转一篇简单易懂的C++编写dll的文档http://wenku.baidu.com/view/ebb7e1edb8f67c1cfad6b867.html
相关文章推荐
- c/c++ long long 和__64int区别
- C++编程——微生物增殖
- 快速排序之所有的c/c++的实现
- C++中基本数据类型字节数及取值范围
- C++类单一继承学习笔记
- C++只在堆上与栈上创建对象
- 设计模式:适配器模式(7.1.1)C++版
- 2013-C++第10周项目参考解答链接集
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言
- C++.Homework.Inheritance.02
- Python 与 C++ 的交互编程
- ForSecondWork-No.1:C/C++笔试题回忆并整理
- C++中四种类型转换方式
- ForSecondWork-No.2:C/C++笔试题回忆并整理
- C++二维数组new几种应用方法点评
- C++合并排序算法
- 关于ceiling 的C语言实现
- C/C++一道题目的答案-函数指针与指针函数
- 通过gr-modtool在gnuradio中编写自己的C++模块
- 高地址和低地址