У меня есть COM-объект ATL, который я использую из С#. На данный момент интерфейс выглядит так:
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 createDate; идентификатор строки; сводка строки; }; Все члены структуры являются std::string. У меня есть их массив, который мне нужен, чтобы вернуться к С#. Как лучше всего это сделать?
Я подозреваю, что кто-то скажет: «Эй, вы не можете просто отправить std::string через COM вот так. Если да, то хорошо, но как лучше всего модифицировать структуру? Изменить std::string на BSTR? И как мне это сделать: 1) Настроить IDL для передачи массива структур (структуры с BSTR или std::string) 2) Если я должен использовать SAFEARRAYS, как мне заполнить SAFEARRAYS структурами.
Я не знаком с COM, за исключением использования с простыми типами.