我有一个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
创建了一个BackgroundWorkerApplication.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尝试过了,但对我来说没什么用。