您的位置:首页 > 编程语言 > C语言/C++

C#获取C++中修改过的float数组(指针),dll

2013-11-03 16:29 459 查看
C++中

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: