Problemas con #import de servidor .NET fuera de proceso
Pregunta
En el programa C++, estoy intentando #importar TLB del servidor .NET fuera de proceso.
Recibo errores como:
z:\servidor.tlh(111) :error C2146:error de sintaxis :desaparecido ';' Antes del identificador 'getType'
z:\servidor.tlh(111) :error C2501:'_TypePtr':faltan especificadores de clase o tipo de almacenamiento
z:\servidor.tli(74) :error C2143:error de sintaxis :desaparecido ';' antes de 'etiqueta :: id'
z:\servidor.tli(74) :error C2433:'_TypePtr':'en línea' no permitido en declaraciones de datos
z:\servidor.tli(74) :error C2501:'_TypePtr':faltan especificadores de clase o tipo de almacenamiento
z:\servidor.tli(74) :error grave C1004:final inesperado del archivo encontrado
El TLH se parece a:
_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();
Realmente no estoy interesado en tener los métodos de objeto .NET del objeto base como GetType(), Equals(), etc.Pero GetType() parece estar causando problemas.
Algunas investigaciones de Google indican que podría #import mscorlib.tlb
(o ponerlo en la ruta), pero tampoco puedo compilarlo.
¿Algun consejo?
Solución 3
Agregué no_namespace y raw_interfaces_only a mi #importación:
#import "server.tlb" no_namespace named_guids
También el uso de TLBEXP.EXE en lugar de REGASM.EXE parece ayudar con este problema.
Otros consejos
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.
Más ofensamente, cuando VS cumplió la fuente de coma de un TLB, tendrá una pista como esta:// #Import "C: Windows Microsoft.net Framework v2.0.50727 mscorlib.tlb" Sube agregado esto a stdafx.h antes de #inport youown.tlb la propiedad basic Proyecto para el tipo Proto
Creo que solucionará tu problema.
pero el mayor problema es:Después de hacer todo, habrá algunos errores de tiempo de ejecución cuando llame a un Ptr en su programa.
¿Alguien puede ayudar?
Parece que necesitas usar
[ClassInterface(ClassInterfaceType.None)]
Aquí está otra discusión sobre el problema similar.
Además, asegúrese de que su clase C# no tenga este atributo:
[ClassInterface(ClassInterfaceType.AutoDual)] <-- Parece causar errores en C++ con _TypePtr