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指针,忘达人们指教啊

解决方案 »

  1.   

    我自己尝试了一下
    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);
                
            }
      

  2.   

    // 没有测试环境,只能乱猜几个
    // 试试看使用ref传,ref传递的实际为指针,但是不知道是否可行
    this.axClient1.TestFunc(ref pt, 3);// 试试看将起始数据的指针传递。因为数组结构中,数据都是连续的
    // 所以传递第一个数据的指针过去
    fixed (double* px = &(pt[0].x))
    {
    this.axClient1.TestFunc(px, 3);
    }