如果c++dll的函数返回值为 数组指针,c#这边我需要怎么定义函数,怎么接收呢?
c++:_declspec (dllexport) float* WINAPI shuju(float pv1[],float pv2[],float pv3[],float pv4[])

解决方案 »

  1.   


    [DllImport("sqlite3.dll", EntryPoint = "sqlite3_open",CallingConvention=CallingConvention.Cdecl)]
    public static extern IntPtr shuju(float[] pv1,float[] pv2,float[] pv3,float[] pv4);
      

  2.   

    这个方法我试过,但是 InPre inpre=shuju(a,b,c,d);
    console.write(inpre);
    好像得出的是八位的地址,我该怎么得出我想要的数值呢?
      

  3.   


    [DllImport("sqlite3.dll", EntryPoint = "sqlite3_open",CallingConvention=CallingConvention.Cdecl)]
    public static extern float[] shuju(float[] pv1,float[] pv2,float[] pv3,float[] pv4);......
    float[] fs = shuju(a,b,c,d);
    console.write(fs[0]);
      

  4.   

    "这个方法我试过,但是 InPre inpre=shuju(a,b,c,d);
    console.write(inpre);
    好像得出的是八位的地址,我该怎么得出我想要的数值呢?"使用这个:Marshal.Copy 方法 (IntPtr, Single[], Int32, Int32)
    将数据从非托管内存指针复制到托管单精度浮点数组。 public static void Copy (
    IntPtr source,
    float[] destination,
    int startIndex,
    int length
    )
      

  5.   

    使用float*.直接用不可以嘛?只要加一个unsafe。挺好的。不需要转换。也安全。
      

  6.   

    借宝地向大家求教一下类似的问题。
    我的问题是,函数返回值是结构体指针,C#这边代码不知道怎么写,加ref提示是不行的,
    public static extern ref Struct myfun();
    这么写是不行的,求高手指点。