struct CalcParm
{
double m_dRlu;  
double m_dConc; 
};
extern "C" _declspec(dllexport) int TestFunc(CalcParm* arr)
{
CalcParm aa;
aa.m_dConc= 333;
aa.m_dRlu =5555;
arr[0]= aa;
return 10;
}extern "C" _declspec(dllexport) int TestFunc2(int* arr)
{
arr[0]=10;
return 10;
}如上所示,写了两个简单的测试方法
TestFunc1和TestFunc2   [DllImport("CalcHelper.dll")]
    public extern static int TestFunc1(ref CalibrationStandardPoint arr); [DllImport("CalcHelper.dll")]
    public extern static int TestFunc2(ref int arr);//声明结构体
 /// <summary>
        /// 发光值-浓度值结构体
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public class CalcParm
        {           
            public double m_dRluValue;  //发光值
            public double m_dConcentration; //浓度
        };
//测试调用
int[] arr =new int[3];
TestFunc2(ref arr[0]);
//↑该方法测试通过,并且修改成功
CalcParm[] arr2 =new CalcParm[3];
TestFunc2(ref arr2);//运行结束后报错但是,如果只是传参绝对没问题,如果我要修改又不像通过return返回的话,应该怎么做?

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/hk9wyw21(v=vs.90).aspx
      

  2.   

    你要在哪一头修改。C#的话,可以使用callback。
      

  3.   

    为什么不延续你成功的做法呢?int[] arr =new int[3];
    TestFunc2(ref arr[0]);
    //↑该方法测试通过,并且修改成功
    CalcParm[] arr2 =new CalcParm[3];
    TestFunc2(ref arr2[0]);
      

  4.   

    另外:
            [StructLayout(LayoutKind.Sequential)]
            public struct CalcParm
            {           
                public double m_dRluValue;  //发光值
                public double m_dConcentration; //浓度
            };
      

  5.   


    TestFunc2(ref arr2[0]);这里原来是也是这么写的,不过提问的时候笔误罢了.
    1,4楼都正确
    原来C#里的struct和c++不同
    怪不得出问题!!!!
    关键还是struct结贴.