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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top