通常、COMインターフェイスを作成するには、IDLファイルで宣言する必要があります。私が取り組んでいるプロジェクトでは、C++の*.hファイルで1つのCOMインターフェイスが宣言されています。
struct DECLSPEC_UUID("A67177F7-A4DD-4A80-8EE1-25CF12172068") ISomeService : public IUnknown
{
virtual ~ISomeService() {}
virtual HRESULT Initialize(const Settings& settings) = 0;
// ...
};
さらに、Initializeメソッドは、パラメーターとしてstd::stringフィールドを含む構造体を取ります。対応するCOMクラスはC++で実装されており、別のC++モジュールから使用されます。AppVerifierでコードを実行するまで、これは正常に機能します。アクセス違反の例外が発生します。
だから私の質問は
- * .hファイルでCOMインターフェイスを宣言することは正しいですか?
- はいの場合、COMインターフェイスメソッドのパラメータとしてC ++タイプを指定するのは正しいですか?または、そのような場合(BSTRなど)は常にCOM準拠のタイプを使用する必要がありますか?