C#程序,需要调用一个DLL,DLL给出的一个函数,参数是指向结构体数组的指针。
C++函数的实现
struct FPOINT { double x;double y;};
void DlgTest::OnButton(){
FPOINT st[2]={0.1,0.2,0.99,0.33};
TestFunc((LONG) st,2)
}现在希望能在C#中实现改类似过程。。
不知道如何传递这个struct指针,忘达人们指教啊
C++函数的实现
struct FPOINT { double x;double y;};
void DlgTest::OnButton(){
FPOINT st[2]={0.1,0.2,0.99,0.33};
TestFunc((LONG) st,2)
}现在希望能在C#中实现改类似过程。。
不知道如何传递这个struct指针,忘达人们指教啊
struct FPOINT
{
public double x;
public double y;
} private FPOINT[] pt;
...
...
private void button1_Click(object sender, EventArgs e)
{
FPOINT p1 = new FPOINT();
p1.x = 0.58;
p1.y = 0.18;
FPOINT p2 = new FPOINT();
p2.x = 0.22;
p2.y = 0.28; FPOINT p3 = new FPOINT();
p3.x = 0.15;
p3.y = 0.5;
pt = new FPOINT[3] ;
pt[0] = p1;
pt[1] = p2;
pt[2] = p3; IntPtr iptr = new IntPtr();
Marshal.StructureToPtr(pt, iptr, false);//调试至这里就报错,有空值 //
this.axClient1.TestFunc(iptr.ToInt32(), 3);
}
// 试试看使用ref传,ref传递的实际为指针,但是不知道是否可行
this.axClient1.TestFunc(ref pt, 3);// 试试看将起始数据的指针传递。因为数组结构中,数据都是连续的
// 所以传递第一个数据的指针过去
fixed (double* px = &(pt[0].x))
{
this.axClient1.TestFunc(px, 3);
}