在C#中获取2d数组到IntPtr的地址

时间:2016-11-08 10:46:24

标签: c# c arrays intptr

我有一个c程序,我想用c#重新编程。

在C程序中,使用一个访问二维数组地址的函数。

Dll.h

int Fg_AddMem(Fg_Struct * Fg, void *pBuffer, const size_t Size, const frameindex_t bufferIndex, dma_mem *memHandle);

Programm.cpp:

#include "Dll.h"
.
.
#define BUFFERS 4
#define BUFFERSIZE(1024*1024)
static char buf[BUFFERS+1][BUFFERSIZE]

for (int i=0; i<BUFFERS; i++)
{
int ret = Fg_AddMem(fg, buf[i], BUFFERSIZE, i, mhead);
.
.
}

现在我想用C#编程

首先,我创建了一个类来通过pInvoker插件导入Dll函数

CAM_SISO.cs:

[DllImport ("fglib5.dll", setLastError = true, CallingConvention = CallingConvention.Cdecl)]
public extern static int Fg_AddMem(IntPtr Fg, IntPtr pBuffer, int size, int bufferIndex, IntPtr memHandle);

我还为for-loop

创建了一个BackgroundWorker

Application.cs:

int BufCnt=4;
int Buffersize = 1024*1024;
BackgroundWorker worker_current_add_mem;
.
this.Load += new EventHandler(this.add_mem_backgroundworker);
.
private void add_mem_backgroundworker(object sender, EventArgs e)
{
.
.
worker_current_add_mem.DoWork += new DoWorkEventHandler(worker_Add_mem);
}
.
private void worker_Add_mem(object sender, DoWorkEventArgs e)
{
char[,]buf = new char[BufCnt+1,Buffersize];
for(int i=0; i<BufCnt; i++)
{
int ret = CAM.SISO.Fg_AddMem(Fg, ??? , Buffersize, i, mHead);
.
.
}
}

所以现在我的问题是,如何将2d数组的地址传递给IntPtr。另外我想在c中,数组在第一个字段中递增以添加内存。

我该如何继续?

我已经用GCHandle和Marshal.Copy尝试过了,但对我来说没什么用。

0 个答案:

没有答案