2012-04-17 27 views
7

Tenemos un complemento para IE basado en spicIE, el propósito es conectarnos a algunos dispositivos externos.¿Qué hace realmente RegAsm? ¿Dónde se copian los archivos?

Para conectarse a esos dispositivos externos, otra empresa desarrolló sus tokens & DLLs. Necesitamos tener algunos ActiveX y DLL para hacer autenticación por token.

El problema es que el complemento que desarrollamos para IE, en la parte final tiene un archivo install.bat, que ejecuta un RegAsm y registra el archivo DLL y luego ese complemento (o sus cambios) se puede ver en IE.

Al ejecutar el complemento desde IE, nuestro código no puede encontrar algunos archivos DLL, necesarios para la autenticación (asígnele el nombre x.dll). ¿Dónde está copiada la DLL registrada? ¿Realmente está copiado? Necesito tener x.dll en la carpeta donde existe la DLL de mi complemento.

Respuesta

6

En pocas palabras, RegAsm registra su ensamblado .NET para que pueda visualizarse COM. Desde MSDN: una vez que se registra una clase, cualquier cliente COM puede usarla como si la clase fuera una clase COM. La clase se registra solo una vez, cuando el ensamblaje está instalado. No se pueden crear instancias de clases dentro del ensamblado desde COM hasta que realmente estén registradas.

Sin ver su código en ActiveX, si lo entiendo correctamente, su ActiveX depende de algunas DLL COM, razón por la cual está ejecutando RegAsm contra una DLL .NET.

Ejecute RegDllView para buscar los detalles de lo que está registrado y luego compruebe si realmente está creando una instancia de ese objeto que en realidad está registrado.

Además, si todavía tiene problemas, intente crear una instancia del objeto en VB6/Visual Studio 2010 etc. o su equivalente en el enlace anticipado para ver si tiene algún problema. Examine el error en la creación de instancias.

+0

la situación es inversa, necesitamos crear una instancia de los componentes com/active x en nuestro código administrado, nuestro código administrado no puede encontrar los componentes com/active x –

+1

Ahh ok. Si se trata de componentes COM clásicos, entonces simplemente debería estar haciendo regsvr32 en ellos. Después de eso, debería poder agregar una referencia en su proyecto VS.NET, en la pestaña COM e instanciar. VS hace todo el trabajo por usted en segundo plano en términos de mapeo de tipos, etc. – AshesToAshes

+1

También para agregar a eso, hay buena información aquí: http://stackoverflow.com/questions/635839/best-way-to- access-com-objects-from-c-sharp, que también te ayudará a comenzar. De nuevo, intente crear una instancia y examine el HRESULT/catch que sale a medida que avanza. – AshesToAshes

Cuestiones relacionadas