读书人

C#调用C++dll传接结构体数组并修改内容

发布时间: 2013-11-01 14:43:02 作者: rapoo

C#调用C++dll传递结构体数组并修改内容


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返回的话,应该怎么做?



[解决办法]
http://msdn.microsoft.com/zh-cn/library/hk9wyw21(v=vs.90).aspx
[解决办法]
另外:
[StructLayout(LayoutKind.Sequential)]
public struct CalcParm
{
public double m_dRluValue; //发光值
public double m_dConcentration; //浓度
};

读书人网 >C#

热点推荐