Pregunta

Estoy tratando de utilizar una tercera parte COM DLL (no creo que es un componente .NET) de un servicio .NET sin registrar la DLL COM pero estoy teniendo ninguna suerte hasta ahora.

He copiado los archivos de manifiesto de aquí (http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com) para utilizar como punto de partida (me genera el COM DLL manifestar usando el Mt.exe / regsvr42.exe referenciada). Sin embargo todo lo que consigo es el siguiente error:

Excepción: System.InvalidCastException Mensaje: No se puede elenco objeto COM de tipo 'LOGICLib.LogicClass' al tipo de interfaz 'LOGICLib.ILogic'. Esta operación ha fallado porque la llamada QueryInterface en el componente COM para la interfaz con IID '{AAAAAAAA-AAAAAAAA-AAAA-AAAAAA3E8FB4}' fallado debido al siguiente error: No se admite esa interfaz (Excepción de HRESULT: 0x80004002 (E_NOINTERFACE)) . Fuente: Interop.LOGICLib en LOGICLib.LogicSecuredClass.Connect (IP cadena, UInt16 Valor, Int32 y Resultado) en My.Server.MyAssembly.Loader.Connect () en D: \ MyProject \ Source \ Server \ MyAssembly \ Loader.cs: Línea 461

El manifiesto de aplicación lleva el nombre del exe que inicia el servicio - También he intentado dándole el nombre de la asamblea que llama a la DLL COM. He tratado a partir de la línea de comandos y mediante depurador de Visual Studio. También he intentado usar el archivo de interoperabilidad suministrada por el tercero y generar mi propia.

(Nota -. Sólo he probado en Windows XP hasta ahora)

He pasado dos días en este momento y no han progresado en absoluto. Alguna idea de lo que puede haber pasado por alto?

¿Fue útil?

Solución

El manifiesto de aplicación lleva el nombre del exe que inicia el servicio

Sí, esto no funciona. Windows siempre busca un manifiesto en el propio EXE, incrustado como un recurso no administrado. Sólo cuando no puede encontrar uno en habrá que buscar un archivo manifest en el disco. El problema es que un programa administrado construido con VS2008 y hasta ya tiene un manifiesto. El único defecto dice "Soy consciente de Vista" solamente.

Se puede comprobar esto por sí mismo mediante el uso de archivos + + Abrir Archivo y seleccionando el archivo EXE. Abra la RT_MANIFEST nodo y haga doble clic recurso 1. Si no ve su reg-COM libre de manifiesto las entradas allí, entonces no va a trabajar.

Para solucionarlo, utilice proyecto + Agregar nuevo elemento y seleccionar la plantilla de elementos del archivo Manifiesto de aplicación. Usted obtendrá el manifiesto repetitivo, copiar y pegar su regfree COM entradas en ese país.

Otros consejos

Bueno, de la excepción, que está recibiendo un error de fundido al intentar enviar un objeto de tipo LogicClass a un tipo de interfaz de iLogic. Se parece a LogicClass no implementa iLogic.

no suministró lo que el DLL es o dónde lo tienes, por lo que está mejor apuesta es buscar en la documentación de la biblioteca que está tratando de usar. Sólo una conjetura salvaje, pero parece que va a implementar de manera incorrecta.

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