Friday, March 24, 2006

Passing arrays from C# to Managed C++ : 2

After some more research, here is the best way to define the Managed C++ functions, so that you can pass them from C# easily. /* pass by reference Call from C# like this double dataValue = 0; mClassObj.ValueByRef(ref dataValue); */ void ValueByRef ([In][Out] System::Double *data) //instead of &data { *data = 100; } /* returning an array Call from C# like this double []dataArrayReturned = mClassObj.ReturnArray(); */ System::Double ReturnArray()[] { System::Double data[] = new System::Double[3]; data[0] = 3; data[1] = 33; data[2] = 333; return data; } /* pass as an out param Call from C# like this double []dataArrayAsOut; mClassObj.CreateArrayOut(out dataArrayAsOut); */ void CreateArrayOut([Out] System::Double (*data)[]) { *data = new System::Double[3]; System::Double tmp[] = *data; tmp[0] = 1; tmp[1] = 11; tmp[2] = 111; } /* pass as a ref param Call from C# like this double []dataArrayByRef = null; mClassObj.CreateArrayRef(ref dataArrayByRef); */ void CreateArrayRef ([In][Out] System::Double (*data)[]) //System::Double (&data)[]{ *data = new System::Double[3]; System::Double tmp[] = *data; tmp[0] = 2; tmp[1] = 22; tmp[2] = 222; }

No comments: