我有一个 ATL COM 服务器,其中接口的方法是
CVivsBasic::UpdateSwitchPlan(BSTR plan_name, SAFEARRAY* plan)
这个函数的 IDL 看起来像
typedef struct
{
LONG time_to_play;
BSTR ecportid;
} SwitchPlanItem;
HRESULT UpdateSwitchPlan([in] BSTR plan_name, [in] SAFEARRAY(SwitchPlanItem) plan) ;
我尝试从 C# 中调用它,如下所示:
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);
}
但它崩溃了。将 SAFEARRAY 从 C# 传递到 COM 的正确方法是什么?
我认为这里的问题是你正在使用SAFEARRAY
用户定义类型(UDT),SAFEARRAY
s of VARIANT
, BSTR
and IUnknown
开箱即用,但对于UDT
你需要帮助编组员。请参阅 MSDN 中有关此内容的文章传递 UDT 的 Safearray http://msdn.microsoft.com/en-us/library/ms221212.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)