这是原型UsbApi_API int  _stdcall calculate(int nDev, PULONG pFreqBuf,int freq_num,double *pWaveDat, int *pWaveLen);关于这个参数(double *pWaveDat),c++代码中是这样赋值的
double *pWaveData ;
pWaveData = new double[8*1024*1024];现在如何把这个函数改成 c#可以调用的呢?主要就是这个参数(double *pWaveData )该怎么转换,挺着急的,谢谢谢谢各位!

解决方案 »

  1.   

    http://www.codeproject.com/KB/cs/unmanaged_memory_pointers.aspx
      

  2.   


    谢谢 king19840811,那个网站我去过,但由于对这个类Marshal
    不熟悉,还是不会用。 
      

  3.   

    UsbApi_API int  _stdcall calculate(int nDev, PULONG pFreqBuf,int freq_num,double *pWaveDat, int *pWaveLen); [DllImport("yourdll")]
    private static extern int calculate(int nDev,ref int pFreqBuf,int freq_num,ref double pWaveDat,ref int pWaveLen);
      

  4.   

    Double *pWaveDat  == Double[]
      

  5.   

    (double *pWaveDat)试试:(ref double pWaveDat)
      

  6.   

    谢谢sjzlxd
    Double *pWaveDat  == Double[] 这样是可以的。另外我发现,还是这个函数
    UsbApi_API int  _stdcall calculate(int nDev, PULONG pFreqBuf,int freq_num,double *pWaveDat, int *pWaveLen); int freq_num 这个参数再传值上有问题,也就是我向c++函数传这个int的时候要乘以2,最后输出才是正确的结果,
    后来查了一下c#中的int是4字节的,而c语言的int是2字节所以网上查试了 Int16和[MarshalAs(UnmanagedType.LPArray)]int freq_num)这2个方法都不行啊,这咋办?
      

  7.   

    [DllImport("yourdll")] 
    private static extern int calculate(int nDev,ref int pFreqBuf,int freq_num,ref int pWaveDat,ref short pWaveLen); 
      

  8.   

    其他参数没问题,就这个int 的参数 不对劲 int freq_num