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
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


0