我在公共类里面定义了3个数组变量:namespace GlobalVariable
{
    public class Global
     {
        public static int FrameCount;
        public static double[] NmlzdSignal = new double[4096];
        public static double[] real = new double[4096];
        public static double[] imag = new double[4096];
       
      }
}然后在一个函数里用指针访问这三个数组:unsafe private void GetNyquistPlot()
{   double *inpPtr=Global.NmlzdSignal;   double *realPtr=Global.real;   double *imagPtr=Global.imag;
   Hilbert(inpPtr,realPtr,imagPtr);}报错...赋不了值,,,Cannot implicitly convert type 'double[]' to 'double*',三个赋值语句都不对.关键问题是:请问怎样把数组的第一个值赋给指针呢?API接口:void Hilbert(double *input, double *real, double *imag),改不了的.请讲得详细一些,小弟是新手万分感谢!!

解决方案 »

  1.   

    void Hilbert(double *input, double *real, double *imag)你要将声明改成:void Hilbert(ref double[] input, ref double[] real, ref double[] imag)
      

  2.   

    提示是这样的:Cannot implicitly convert type 'double[]' to 'double*'
    不能隐式转换
    你显式转换一下看可以不
    double *inpPtr=(double*)Global.NmlzdSignal;double *realPtr=(double*)Global.real;double *imagPtr=(double*)Global.imag;
      

  3.   

    要用fixed语句防止变量被垃圾回收器重定位
    将函数GetNyquistPlot()改成:
    unsafe private void GetNyquistPlot()
    {
    fixed(double* inpPtr=Global.NmlzdSignal,realPtr=Global.real,imagPtr=Global.imag)
      {
           Hilbert(inpPtr,realPtr,imagPtr);//statement
       }
    }
    fixed 语句设置指向托管变量的指针并在 statement 执行期间“锁定”该变量。如果没有 fixed 语句,则指向托管变量的指针将作用很小,因为垃圾回收可能不可预知地重定位变量。(实际上,除非在 fixed 语句中,否则 C# 不允许设置指向托管变量的指针。)
      

  4.   

    API接口就是指针类型的参数,,声明成引用,API能认吗?我试过了..不行啊抱歉啊..三位..你们的方法似乎都不行:(
      

  5.   

    我的导入:[DllImport("Hilbert.dll",EntryPoint="Hilbert",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]unsafe public static extern void Hilbert(double* input, double* real, double* imag);
      

  6.   

    fixed语句应该是可以的,我在自己机器上试过