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 には、現在構造体であり、次のように見えるいくつかの結果があります。文字列 ID; 文字列の要約; }; 構造体のすべてのメンバーは std::string です。C# に戻す必要があるこれらの配列があります。これを行う最善の方法は何ですか?
誰かがこう言うだろうと思います、「おい、std::string をそのように COM 経由で送信することはできない。もしそうなら、それでいいが、構造体を変更する最良の方法は何だ? std::string を BSTR に変更する?」 1) 構造体の配列 (BSTR または std::string を含む構造体) を渡すように IDL を設定します。2) SAFEARRAYS を使用する必要がある場合、SAFEARRAYS を構造体で埋める方法。
単純な型での使用を除いて、COM には詳しくありません。