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