2011-11-17 11 views
6

así que mi pregunta es relativamente simple, ¿puedo crear una aplicación VB6 que haga referencia a una clase en un dll, y luego sustituir esa dll por otra en tiempo de ejecución?¿Cree la aplicación VB6 usando una clase en una DLL, luego cambie esa DLL después de la compilación?

Ahora mi conjetura inicial es ... ninguna posibilidad en VB6.

Así que mis pensamientos pasaron a una DLL de interoperabilidad VB.net. ¿Podría hacerlo aquí y luego llamar al dll de interoperabilidad del VB?

Nuevamente, supongo que no ... pero me alegraría si alguien supiera algo diferente.

Lo único que creo que realmente funcionaría sería DI en .Net, pero estoy limitado a .net 2 o 3.5 con un gran empujón, así que no sé si eso es posible.

Así que por el fondo ....

que tienen un DLL que utiliza un sitio específico, pero no queremos que para enviar a todo el mundo. En su lugar, queremos construir un clon dll que solo tenga las interfaces configuradas para que la compilación de VB6 se complete. Cuando llega al sitio que lo necesita, quieren reemplazar el archivo dummy dll y colocar su versión en su lugar.

Nota: usamos RegFreeCOM cuando se instala, así que tengo los archivos de manifiesto que podría utilizar si es necesario.

Cualquier idea sería muy apreciada.

Nick

+1

Podría utilizar enlace tardío en VB6 lugar de una referencia difícil de la DLL? –

+1

Puedes probar esto en aproximadamente 10 min. Cree un proyecto dll, coloque una clase con un método que devuelva una cadena, codifíquelo para que devuelva "abc". escribe un arnés de prueba, agrega una referencia, llama al método y muéstralo. Ahora escribe otro dll en un nuevo proyecto. El mismo nombre de clase, el mismo nombre de método, devuelve "def". Copie el dll sobre el primero en la carpeta de arnés de prueba y ejecute el arnés de prueba. Creo que verás la nueva cuerda, pero probar es creer. Lo haría si tuviera VB6 en esta máquina, probablemente más rápido que escribir el comentario. –

+1

Esta es una de las razones fundamentales para tener código en una DLL en lugar de en la aplicación (la reutilización y el uso compartido del código es otro) –

Respuesta

8

Es un DLL COM así que no es estáticamente vinculado al exe VB6, siempre y cuando los CLSID y los identificadores de interfaz son los mismos en la biblioteca de tipos para los archivos DLL, puede intercambiarlos alrededor como ves ajuste. (Si es un dll VB6 esto es trivial con la opción de compilación 'compatibilidad binaria')

+0

Gracias Alex. Una de mis dudas era cómo forzar que el CLSID y el TLBID fueran idénticos, y la compatibilidad binaria hizo eso por mí. – Nick

1

También podría usar el enlace tardío y en lugar de hacer una referencia directamente en su código VB6, crearía un objeto y luego establecer ese objeto a una instancia. ejemplos e información:

MVPS

Microsoft

Cuestiones relacionadas