Ich bin neu in COM, und ich schaute auf dem Internet zu finden, wie eine COM-Klasse in C++ (von C # verwendet werden) zu erstellen. Ich habe gesehen, dass in der .idl-Datei, ich muss etwas wie dieses setzen:
[
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;
};
}
Meine Frage ist nun, wo Sie die CTopologyQuery-Klasse definieren? Wenn ich sie als normale C++-Klasse in einer anderen Datei definiere, wird der Compiler meine Klasse dann korrekt mit der Schnittstelle verknüpfen? Der Code der C++-Klasse sieht wie folgt aus (sie ist in einer .cpp-Datei implementiert):
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:
};
Im Moment kompiliert es entweder, wenn ich den Bibliotheksabschnitt in die .idl-Datei einfüge oder nicht. Ich bin ein wenig ratlos, was ist hier das Richtige zu tun? Ich verstehe, dass die Coklassendefinition der Schnittstelle eine Standardimplementierung geben soll, aber für mich sieht es aus wie eine leere Klasse ohne Methoden...