Visual Basic.NET - VB.Net Interoperatibidad objetos COM

 
Vista:

VB.Net Interoperatibidad objetos COM

Publicado por Martin Vazquez (2 intervenciones) el 27/11/2013 09:18:21
Buenos días...

Soy usuario de VS 2012, en concreto programador autodidacta en VB.Net por necesidades de mi trabajo. Les comento mi problema a ver si me pueden ayudar a encontrar la solución.

He desarrollado una aplicación que gestiona un sistema de videovigilancia. Uso el SDK del videograbador al que se conectan de forma que tengo acceso mediante sus bibliotecas correspondientes a todas las funcionalidades del aparato.

Para facilitar el uso de esas funciones, el fabricante (DAHUA) me ha pasado un DLL (sdk.helper.dll) a la cual tengo que llamar y desde la cual accedo a las funciones de todas las demás DLLs que se necesitan.

En su momento, cuanto inicié el proyecto, agregué la referencia a esta DLL (sdk.helper.dll) sin problema y todo funcionó. Para ello tuve que copiar todas las DLL en el directorio \bin\debug de la aplicación.

Cuanto porté la aplicación a otro equipo, en el que iba a funcionar, resulta que no encuentra las DLL, y eso que están en el mismo directorio de la aplicación.

Investigando, descubrí que VB.Net, al agregar la referencia a sdk.helper.dll, creó un archivo interop.helper.dll en el directorio \obj\debug de la aplicación. Y ahí creo que está el problema. Por más que lo he intentado siempre llama a las DLL del directorio original, el cual no existe en la distribución.

Inicialmente guardé el SDK en un directorio temporal y desde VB referencié a la DLL de ese directorio... si cambio el nombre de este directorio, ni el proyecto de VB encuentra las DLL.

Luego fue cuando probé a copiarlas todas en el directorio de la aplicación y nada... solo funciona la aplicación si existe ese directorio temporal y en él las DLL.

Probé a borrar el interop.helper.dll, y volver a referenciar la sdk.helper.dll... pero siempre busca las DLL a las que llama en el directorio temporal, nunca en el de la aplicación.

Probé luego con TLBIMP.exe y creé manualmente el interop.helper.dll en el directorio \bin\debug de la otra máquina en la que nunca existió ese directorio temporal y funcionó, pero en el PC original no hubo forma. COntinuamente llama a las DLL de ese temporal y no tengo forma de cambiar esto para que cuando porte la aplicación no vuelva a tener este problema.

No sé si me he explicado... pero el caso es que esto me está rompiendo la cabeza, sobre todo porque no puedo garantizar el funcionamiento de la aplicación en equipos distintos del mío.



¿a alguien se le ocurre qué puede estar pasando? ¿O cómo se soluciona esto? Entiendo que debe haber una forma de establecer rutas relativas para esas DLLs en vez de absolutas, para que siempre las encuentre en el directorio de la aplicación.

Muchas gracias por anticipado...



Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Carlos Javier Medina
Val: 19
Ha aumentado su posición en 5 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

VB.Net Interoperatibidad objetos COM

Publicado por Carlos Javier Medina (34 intervenciones) el 28/11/2013 02:17:14
Hola Martín,

Mira que yo todavía uso VS2010, sin embargo creo que debe ser lo mismo en VS2012.

Lo que debes hacer es establecer en las propiedades del proyecto, que copie todo lo que necesita para funcionar desde el mismo sitio de la instalación, luego cuando generas una version de instalador, en el mismo van todos los dll necesarios.

Si no sabes como hacerlo, te comunicas conmigo a mi correo y veremos si puedo ayudarte.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

VB.Net Interoperatibidad objetos COM

Publicado por Martín (2 intervenciones) el 28/11/2013 08:15:20
Buenos días...

muchas gracias por tu respuesta.

EL caso es que el problema no está en la generación del instalaror, de hecho ni he intentado la publicación. Mi idea es coger todo lo que hay en el directorio \bin\release o \bin\debug y distribuirlo... hasta ahora siempre me ha funcionado así.

LA cuestión es que cuando el fabricante del DVR me pasó el SDK, temporalmente lo grabé en un directorio c:\Temporal\SDK. Entre otras DLLs, está SDK.HELPER.DLL que es a la que tengo que llamar y ella llama a las otras.

Desde mi proyecto de VB.net, fui a añadir referencias, examinar y seleccioné SDK.HELPER.DLL. Hasta aquí todo correcto. Luego en el código creaba todas las referencias a la DLL como:

Dim objDH as dhHelperDll.netsdk

y desde objDH ya referenciaba a todas las funciones (objDH.init para inicializar la conexión con el DVR, objDH.monitor para referencia a cada canal de vídeo, etc)

Fue más tarde cuando llevé la solución a otro equipo cuando el IDE de VB.net me decía que no podía hacer referencia a "dhHelperDll", no se encotraba la DLL correspondiente.

Investigando, fue cuando descubrí la existencia de interop.helper.dll, que al parecer la crea VB.net al referenciar una biblioteca creada (en \obj\debug o en \obj\release), en esta caso, con VB6 como intermediaria para adaptarla a la estructura .Net Framework y así poder usarla en .Net.

Después de muchas vueltas, encontré TLBIMP.exe, para crear manualmente la interoperabilidad .Net con objetos COM:

TLBIMP sdk.helper.dll /out:interop.helper.dll /namespace:dhHelperDll

Este interop.helper.dll lo creé en el directorio \bin\debug y ahí copié todas las DLLs a las que llama sdk.helper.dll y todo empezó a funcionar.

El problema está en el equipo original, que es el mío, y donde desarrollo la aplicación. Si copio todas las DLLs en \bin\debug y uso TLBIMP.exe como antes, creo el interop.helper.dll y todo parece funcionar, pero en cuanto borro el c:\temporal\SDK, me vuelve a decir lo mismo que en el otro equipo, que no encuentra dhHelperDll.

He vuelto a usar TLBIMP.exe como antes y nada, hasta que he vuelvo a crear el directorio c:\temporal\SDK con las DLLs, no funciona nada.

Ese es mi problema, no puedo distribuir mi aplicación y que en cada equipo tenga este problema siempre.

¿Alguna solución?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos Javier Medina
Val: 19
Ha aumentado su posición en 5 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

VB.Net Interoperatibidad objetos COM

Publicado por Carlos Javier Medina (34 intervenciones) el 29/11/2013 01:52:19
Martín,
La función del instalador es la unión de todos los componentes de un programa, para que cuando tu lo publicas, de acuerdo con las opciones que le hayas dado, copiara los elementos en la instalación.

Cuando uno copia manualmente los elementos, no los puede ubicar en el lugar preciso que se necesitan.

Te sugiero que pruebes a generar una versión donde estableces que todo estará en la publicación.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

VB.Net Interoperatibidad objetos COM

Publicado por omar (128 intervenciones) el 28/11/2013 02:32:29
Puedes usar ootros programas para empaquetar mas faicl que 2012

Enviame un email o tu exe con las dll y lo empaqueto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

DLL sdk.helper.dll

Publicado por ELKIN MEDINA (1 intervención) el 12/05/2014 18:27:56
DONDE ENCUENTRO AL DLL (sdk.helper.dll), NECESITO VER LA IMAGEN DE UNA CAMARA DAHUA

GRACIASS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

DLL sdk.helper.dll

Publicado por Hugo Jimenez (1 intervención) el 24/11/2015 23:51:46
Buenas tardes, Me gustaría que me enviaras las SDK de dahua, voy a iniciar un proyecto entre dahua y siesse,
este es mi correo [email protected]
Si resuelvo el problema, lo comento, muchas gracias ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar