I have an ATL COM Server, where the method for the interface is
CVivsBasic::UpdateSwitchPlan(BSTR plan_name, SAFEARRAY* plan) And the IDL for this function looks like
typedef struct { LONG time_to_play; BSTR ecportid; } SwitchPlanItem; HRESULT UpdateSwitchPlan([in] BSTR plan_name, [in] SAFEARRAY(SwitchPlanItem) plan) ; I tried to call it from C# like this:
internal void UpdateSwitch(string plan_name, string ecportid) { SwitchPlanItem sp1; sp1.time_to_play = 33; sp1.ecportid = ecportid; SwitchPlanItem sp2; sp2.time_to_play = 33; sp2.ecportid = ecportid; SwitchPlanItem[] sps = { sp1, sp2 }; sdk.UpdateSwitchPlan(plan_name, sps); } But it crash. What is the correct way to pass a SAFEARRAY from C# to COM?