extern "C" __declspec(dllexport) BOOL Initdata(double* d_Conc, double* d_RLU,double d_Cal1RLU, double d_Cal2RLU,double d_Cal1Conc, double d_Cal2Conc, int nLen,int FitMethod);
数组地址如何传递呢??
            double[] arrConc = new double[]
            {
                0,4,16,
                32,64,128
            };
            double[] arrRlu = new double[]
            {
                8487,36329,159167,
                315859,654285,1190543
            };
            double Cal1Rlu = 36330;
            double Cal1Conc = 4;
            double Cal2Rlu = 654285;
            double Cal2Conc = 64;
     
            int len = 6;
            int fitWay = 1;
            //初始化无法获取到正确的
            bool rt = Initdata(ref arrConc[0], ref arrRlu[0], Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);
   [DllImport("Cal_datadll.dll")]
        public static extern bool Initdata(ref double dConc, ref double dRlu,
             double Cal1Rlu, double Cal1Conc, double Cal2Rlu, double Cal2Conc, int len, int fitWay);
/************************/
[DllImport("Cal_datadll.dll")]
        public static extern bool Initdata(ref double[] dConc, ref double[] dRlu,
             double Cal1Rlu, double Cal1Conc, double Cal2Rlu, double Cal2Conc, int len, int fitWay);
     bool rt = Initdata(ref arrConc, ref arrRlu, Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);
//也不行.

解决方案 »

  1.   

    C#调用C++编写的DLL函数, 以及各种类型的参数传递
      

  2.   

    本帖最后由 bdmh 于 2012-08-28 14:25:16 编辑
      

  3.   

    double* d_Conc
    应该指的是数组地址,
     int nLen
    应该指的是数组长度.
      

  4.   

    bool rt = Initdata(ref arrConc[0], ref arrRlu[0], Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);
    这个有问题吧,如果double*表示数组,那就直接用double[],不要用ref,还有C++中的指针在C#中可以用Intptr表示,不管指针表示的是数组还是字符串。
      

  5.   

    http://wenku.baidu.com/view/5126f84b2b160b4e767fcf85.html?st=1在给各连接看看
      

  6.   

    [MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)] double [] Z,,, [MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)】在C#中数组是直接使用的,而在C++中返回的是数组的指针,这句用来转化这两种不同的类型.
      

  7.   

    楼上的方法在我这儿不好使,有可能是我没有调用正确
    我用的是下面的方法解决的
    http://www.soaspx.com/dotnet/csharp/csharp_20101230_6998.html