Pergunta

No programa C++, estou tentando #importar TLB do servidor .NET fora de processo.

Recebo erros como:

z:\servidor.tlh(111) :erro C2146:erro de sintaxe :ausente ';' antes do identificador 'gettype'

z:\servidor.tlh(111) :erro C2501:'_TypePtr':faltando especificadores de classe ou tipo de armazenamento

z:\servidor.tli(74) :erro C2143:erro de sintaxe :ausente ';' antes de 'tag :: id'

z:\servidor.tli(74) :erro C2433:'_TypePtr':'inline' não permitido em declarações de dados

z:\servidor.tli(74) :erro C2501:'_TypePtr':faltando especificadores de classe ou tipo de armazenamento

z:\servidor.tli(74) :erro fatal C1004:final inesperado do arquivo encontrado

O TLH se parece com:

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

Não estou realmente interessado em ter métodos de objeto .NET do objeto base, como GetType(), Equals(), etc.Mas GetType() parece estar causando problemas.

Algumas pesquisas do Google indicam que eu poderia #import mscorlib.tlb (ou coloque-o no caminho), mas também não consigo compilar.

Alguma dica?

Foi útil?

Solução 3

Adicionados no_namespace e raw_interfaces_only ao meu #import:

#import "server.tlb" no_namespace named_guids

Também usar TLBEXP.EXE em vez de REGASM.EXE parece ajudar nesse problema.

Outras dicas

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

Mais de maneira alguma, quando o VS cumpriu a fonte COM a um TLB nele terá uma dica como esta:// #import "C: Windows Microsoft.net Framework V2.0.50727 mscorlib.tlb" Você shoud Adicione isso a stdafx.h antes de #inport youwown.tlb a propriedade da basice como _type, _objref adicionará você a Projeto para o tipo proto

eu acho que isso vai resolver seu problema.

mas o problema maior é:depois de tudo feito, ocorrem alguns erros de execução quando você chama um Ptr em seu programa

alguém pode ajudar?

Parece que você precisa usar

[ClassInterface(ClassInterfaceType.None)]

Aqui está outra discussão sobre o problema semelhante.

Além disso, certifique-se de que sua classe C# não tenha este atributo:

[ClassInterface(ClassInterfaceType.AutoDual)] <- Parece causar erros em C++ com _TypePtr

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top