这是原型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 )该怎么转换,挺着急的,谢谢谢谢各位!
double *pWaveData ;
pWaveData = new double[8*1024*1024];现在如何把这个函数改成 c#可以调用的呢?主要就是这个参数(double *pWaveData )该怎么转换,挺着急的,谢谢谢谢各位!
谢谢 king19840811,那个网站我去过,但由于对这个类Marshal
不熟悉,还是不会用。
private static extern int calculate(int nDev,ref int pFreqBuf,int freq_num,ref double pWaveDat,ref int pWaveLen);
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个方法都不行啊,这咋办?
private static extern int calculate(int nDev,ref int pFreqBuf,int freq_num,ref int pWaveDat,ref short pWaveLen);