我有一个从 C# 使用的 ATL COM 对象。目前界面如下:
interface ICHASCom : IDispatch{
[id(1), helpstring("method Start")] HRESULT Start([in] BSTR name, [out,retval] VARIANT_BOOL* result);
...
[id(4), helpstring("method GetCount")] HRESULT GetCount([out,retval] LONG* numPorts);
...
[id(7), helpstring("method EnableLogging")] HRESULT EnableLogging([in] VARIANT_BOOL enableLogging);
};
也就是说,它是一个非常简单的界面。我也有一些事件要发回。现在,我想在界面中添加一些内容。在 ATL 中,我有一些结果,它们当前是结构,看起来像 struct REPORT_LINE { string creationDate; 字符串标识;字符串摘要;}; 结构的所有成员都是std::string。我有一个数组,我需要回到 C#。最好的方法是什么?
我怀疑有人会说,“嘿,你不能像那样通过 COM 发送 std::string。如果是这样,很好,但是修改结构的最佳方法是什么?将 std::string 更改为 BSTR?然后我该怎么做,1)设置 IDL 以传递结构数组(带有 BSTR 或 std::string 的结构) 2)如果我必须使用 SAFEARRAYS,我如何用结构填充 SAFEARRAYS。
除了使用简单类型外,我不熟悉 COM。