Я новичок в COM, и я посмотрел в Интернете, чтобы найти, как создать класс COM в C ++ (для использования в 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 или нет.Я немного растерялся, что тут хорошего делать?Я понимаю, что определение coclass должно давать реализацию интерфейса по умолчанию, но для меня это выглядит как пустой класс без методов ...