2016-07-19 21 views
-1

MSDN hat Verweis, dass C-Sprache auch zum Erstellen und Verwenden von COM-Objekten verwendet werden kann.Gibt es eine Möglichkeit, COM-Schnittstellen in C zu verwenden/aufzurufen?

Ich ging durch CodeProject here und festgestellt, dass relevante Header-Dateien erstellt werden und sie werden in welche C-Anwendung, die diese COM-Schnittstellen aufruft, enthalten sein.

Haben alle COM-Objekte von Windows ähnliche relevante Header-Dateien?

Oder gibt es eine andere Möglichkeit, COM-Schnittstellen von C aufzurufen?

+0

Wenn es richtig gebaut wird, wahrscheinlich durch den Interface Definition Language Compiler (MIDL), dann wird es entsprechende C-Interface-Definitionen geben. Du bist schon auf dem richtigen Weg. Und fyi, COM von C ist ein f'ing * pain *, aber trotzdem machbar. – WhozCraig

+0

COM ist ** designed **, um von C aufgerufen werden zu können. Wenn die entsprechenden Header-Dateien fehlen, müssen Sie den lpVtbl manuell rekonstruieren. Einträge werden in der Reihenfolge sortiert, in der sie deklariert sind, wobei die Basisschnittstellen zuerst gehen. – IInspectable

+0

Es ist möglich, dass die Praxis jedoch durch die Genfer Konvention über die Rechte von Programmierern verboten ist. Wir abonnieren das hier, Sie werden selten nützliche Hilfe bekommen, wenn Sie in Schwierigkeiten geraten. Sie werden in Schwierigkeiten geraten. –

Antwort

1

Haben alle COM-Objekte von Windows ähnliche relevante Header-Dateien?

Alle Header-Dateien aus einer Microsoft Interface Definition Language Datei erzeugen die MIDL compiler verwendet, werden Definitionen für die Verwendung von C-Programmen enthalten. Siehe C/C++-Compiler Considerations:

Die generierte .h-Datei verfügt sowohl über C-style- als auch C++ - Style-Definitionen für Schnittstellen.

Ich weiß nicht, ob alle COM-Objekte, die von C-Programmen unter Windows oder Windows SDK kam mit vorgefertigten Header für die Verwendung versenden, aber es wäre sicherlich sinnvoll sein, so zu übernehmen. Falls Sie eine Schnittstelle finden, für die es keine C-Schnittstellendefinition gibt, können Sie den MIDL-Compiler immer für die .idl-Datei ausführen.

Oder gibt es eine andere Möglichkeit, COM-Schnittstellen von C aufzurufen?

Einige COM-Schnittstelle-Implementierungen auch als type libraries (TLB) kommen. Sie können den TLB in Ihren C++ Code #import. Dies generiert eine primäre Headerdatei (.tlh), mit der Sie eine Schnittstellendefinition im C-Stil rekonstruieren können.