Probleme mit #import des .NET-Out-of-Proc-Servers
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?
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