Domanda

Sto cercando di usare un 3a parte DLL COM (non credo proprio un componente .NET) da un servizio .NET senza registrare il DLL COM, ma sto avendo alcuna fortuna finora.

Ho copiato i file manifesto da qui (http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com) da utilizzare come punto di partenza (ho generato il COM DLL manifesta utilizzando il Mt.exe / regsvr42.exe riferimento). Comunque tutto quello che ottiene è il seguente errore:

eccezione: System.InvalidCastException Messaggio: impossibile oggetto getto COM di tipo 'LOGICLib.LogicClass' al tipo di interfaccia 'LOGICLib.ILogic'. Questa operazione non è riuscita perché la chiamata QueryInterface sul componente COM per l'interfaccia con IID '{AAAAAAAA-AAAAAAAA-AAAA-AAAAAA3E8FB4}' non riuscita a causa del seguente errore: Interfaccia non supportata (Eccezione da HRESULT: 0x80004002 (E_NOINTERFACE)) . Fonte: Interop.LOGICLib a LOGICLib.LogicSecuredClass.Connect (String IP, UInt16 Valore, Int32 & Risultato) a My.Server.MyAssembly.Loader.Connect () in D: \ MyProject \ Source \ Server \ MyAssembly \ Loader.cs: linea 461

Il manifesto applicazione prende il nome dal exe che avvia il servizio - ho provato anche la denominazione dopo l'assemblea che chiama la DLL COM. Ho provato a partire dalla linea di comando e tramite il debugger di Visual Studio. Ho anche provato ad utilizzare il file Interop fornito da terze parti e la generazione di mio.

(Nota -. Ho provato solo in Windows XP finora)

Ho trascorso due giorni in questa ora e non hanno progredito affatto. Tutte le idee che io possa aver perso?

È stato utile?

Soluzione

Il manifesto applicazione prende il nome dal exe che avvia il servizio

Sì, questo non funziona. Windows cerca sempre di una manifesta nel file EXE per sé, incastonato come una risorsa non gestita. Solo quando non si riesce a trovare uno in esso ci sarà cercare un file manifest su disco. Il problema è, un programma gestito costruito con VS2008 e fino ha già un manifesto. Quella di default dice: "Sono Vista consapevole" solo.

È possibile verificare questo da soli utilizzando File + Open + File e selezionando il file EXE. Aprire il nodo e fare doppio clic su risorse RT_MANIFEST 1. Se non viene visualizzata la reg-COM libera manifesta là voci allora non sta andando al lavoro.

Per risolvere, utilizzare Project + Aggiungi nuovo elemento e selezionare il modello di elemento del file manifesto dell'applicazione. Otterrete il manifesto boilerplate, copiare e incollare il vostro regfree COM voci in là.

Altri suggerimenti

Bene, da eccezione, che stai ricevendo un errore di getto quando si cerca di lanciare un oggetto di tipo LogicClass ad un tipo di interfaccia di iLogic. Assomiglia LogicClass non implementano iLogic.

non ha fornito ciò che la DLL è o dove avete capito bene, così sei soluzione migliore è quella di guardare la documentazione per la biblioteca si sta tentando di utilizzare. Solo un ipotesi, ma sembra che si sta attuazione in modo non corretto.

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