我有一个 ATL COM 服务器,其中接口的方法是
CVivsBasic::UpdateSwitchPlan(BSTR plan_name, SAFEARRAY* plan)
Run Code Online (Sandbox Code Playgroud)
这个函数的 IDL 看起来像
typedef struct
{
LONG time_to_play;
BSTR ecportid;
} SwitchPlanItem;
HRESULT UpdateSwitchPlan([in] BSTR plan_name, [in] SAFEARRAY(SwitchPlanItem) plan) ;
Run Code Online (Sandbox Code Playgroud)
我尝试从 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);
}
Run Code Online (Sandbox Code Playgroud)
但它崩溃了。将 SAFEARRAY 从 C# 传递到 COM 的正确方法是什么?
最近我正在为DVR构建软件.
它将安装在插有2个或更多PCIE x4视频编码器卡的x86 pc服务器上.
我们有2个分离的过程,一个必须从这些编码器卡获取编码的视频数据,另一个必须将这些数据保存到硬盘驱动器.为什么我们有两个过程?一些历史问题.
那么,我们应该使用什么样的IPC?套接字,管道或共享内存?
目前我们正在使用socket.