Problemi con l'#importazione del server .NET out-of-proc
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?
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