Domanda

Nel programma C++, sto cercando di #importare TLB del server out-of-proc .NET.

Ottengo errori come:

z:\server.tlh(111) :errore C2146:Errore di sintassi :mancante ';' Prima dell'identificatore "getttype"

z:\server.tlh(111) :errore C2501:'_TypePtr':specificatori di classe o tipo di archiviazione mancanti

z:\server.tli(74) :errore C2143:Errore di sintassi :mancante ';' Prima di 'tag :: id'

z:\server.tli(74) :errore C2433:'_TypePtr':"inline" non consentito nelle dichiarazioni di dati

z:\server.tli(74) :errore C2501:'_TypePtr':specificatori di classe o tipo di archiviazione mancanti

z:\server.tli(74) :errore fatale C1004:Trovata fine file inaspettata

Il TLH appare così:

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

Non sono veramente interessato ad avere i metodi dell'oggetto .NET di base come GetType(), Equals(), ecc.Ma GetType() sembra causare problemi.

Alcune ricerche su Google indicano che potrei #import mscorlib.tlb (o inserirlo nel percorso), ma non riesco a compilare neanche quello.

Qualche consiglio?

È stato utile?

Soluzione 3

Aggiunti no_namespace e raw_interfaces_only al mio #import:

#import "server.tlb" no_namespace named_guids

Anche l'utilizzo di TLBEXP.EXE invece di REGASM.EXE sembra risolvere questo problema.

Altri suggerimenti

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

Più ofenly, quando vs ha rispettato la fonte COM in un TLB in esso avrà un suggerimento come questo:// #IMPORT "C: Windows Microsoft.net Framework v2.0.50727 mscorlib.tlb" Aggiungi questo a stdafx.h prima di #inport yown.tlb la proprietà Basice come _Type, _objref verrà aggiunto in te in te Progetto per il tipo Proto

penso che risolverà il tuo problema.

ma il problema più grande è:dopo aver fatto tutto, si verificano alcuni errori di runtime quando chiami un Ptr nel tuo programma

qualcuno può aiutare?

Sembra che tu abbia bisogno di usarlo

[ClassInterface(ClassInterfaceType.None)]

Qui è un'altra discussione riguardo al problema simile.

Inoltre, assicurati che la tua classe C# non abbia questo attributo:

[ClassInterface(ClassInterfaceType.AutoDual)] <-- Sembra causare errori in C++ con _TypePtr

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top