私は COM を初めて使用します。インターネットで調べて、C++ で COM クラスを作成する方法を見つけました (C# で使用するため)。.idl ファイルに、次のようなものを配置する必要があることがわかりました。
[
object,
uuid(a93164ee-e6d4-44be-aa27-f00ce6972719),
helpstring("interface ITopologyQuery")
]
interface ITopologyQuery : IUnknown
{
HRESULT LoadFile(BSTR completeFileName);
HRESULT SetParameters(int above, int percentage);
}
[
uuid(a958f2af-8b55-43c4-9fc3-c39d83fc1376)
]
library TopologyQueryLib
{
[
uuid(cc814992-31ec-4a1f-a41e-111ade27bdfe),
helpstring("TopologyQuery class")
]
coclass CTopologyQuery
{
[default] interface ITopologyQuery;
};
}
私の質問は、CTopologyQuery クラスをどこで定義するかということです。別のファイルで通常の C++ クラスとして定義した場合、コンパイラはクラスをインターフェイスに正しくリンクしますか? C++ クラス コードは次のようになります (.cpp ファイルに実装されています)。
class CTopologyQuery : public ITopologyQuery
{
public:
__stdcall CTopologyQuery();
//IUnknown interface
HRESULT __stdcall QueryInterface(REFIID riid, void **ppObj);
ULONG __stdcall AddRef();
ULONG __stdcall Release();
//ITopologyQuery interface
HRESULT __stdcall LoadTopologyFile(BSTR completeFileName);
HRESULT __stdcall SetParameters(int above, int percentage);
private:
};
今のところ、ライブラリ セクションを .idl ファイルに入れても、入れなくてもコンパイルされます。ここで何をするのが良いのか、少し迷っています。コクラス定義がインターフェイスにデフォルトの実装を与えることになっていることは理解していますが、私にとってはメソッドのない空のクラスのように見えます...