Frage

In einem C++-Programm versuche ich, den TLB eines .NET-Out-of-Proc-Servers #importieren.

Ich erhalte Fehler wie:

z:\server.tlh(111) :Fehler C2146:Syntax-Fehler :fehlen ';' Vor dem Kennung "Gettyp"

z:\server.tlh(111) :Fehler C2501:'_TypePtr':Fehlende Speicherklassen- oder Typspezifizierer

z:\server.tli(74) :Fehler C2143:Syntax-Fehler :fehlen ';' vor 'Tag :: id'

z:\server.tli(74) :Fehler C2433:'_TypePtr':„inline“ ist bei Datendeklarationen nicht zulässig

z:\server.tli(74) :Fehler C2501:'_TypePtr':Fehlende Speicherklassen- oder Typspezifizierer

z:\server.tli(74) :Schwerwiegender Fehler C1004:Unerwartetes Ende der Datei gefunden

Der TLH sieht so aus:

_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();

Ich bin nicht wirklich daran interessiert, dass das Basisobjekt .NET-Objektmethoden wie GetType(), Equals() usw. hat.Aber GetType() scheint Probleme zu verursachen.

Einige Google-Recherchen deuten darauf hin, dass ich es könnte #import mscorlib.tlb (oder in den Pfad einfügen), aber ich kann das auch nicht kompilieren.

Irgendwelche Tipps?

War es hilfreich?

Lösung 3

no_namespace und raw_interfaces_only zu meinem #import hinzugefügt:

#import "server.tlb" no_namespace named_guids

Auch die Verwendung von TLBEXP.EXE anstelle von REGASM.EXE scheint dieses Problem zu lösen.

Andere Tipps

#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.

Wenn VS die COM -Quelle eines TLB darin einging, wird ein Hinweis auf einen solchen Hinweis haben:// #import "C: Windows Microsoft.net Framework V2.0.50727 MSCORLIB.TLB" Sie sollten dies zu stdafx.h vor #inport Youown.tlb die Eigenschaft der Basis wie _type hinzufügen, _objref wird in Ihnen hinzugefügt. Projekt für den Proto -Typ

Ich denke, es wird Ihr Problem lösen.

aber das größere Problem ist:Nachdem alles erledigt ist, treten einige Laufzeitfehler auf, wenn Sie in Ihrem Programm einen Ptr aufrufen

Kann jemand helfen?

Es scheint, dass Sie es verwenden müssen

[ClassInterface(ClassInterfaceType.None)]

Hier ist noch eine Diskussion über das ähnliche Problem.

Stellen Sie außerdem sicher, dass Ihre C#-Klasse dieses Attribut nicht hat:

[ClassInterface(ClassInterfaceType.AutoDual)] <-- Scheint Fehler in C++ mit _TypePtr zu verursachen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top