Enlace con DLL Externa
Procedimiento VB6:
- Crear un proyecto con las librerías y funciones a emplear. Es importante asegurarse que está marcado el check de compatibilidad para COM (en Visual Studio).
- Generar la dll y registrarla.
- Llamarla desde el ERP de una forma similar a la expuesta:
Set lObj = CreateObject ("<NombreLibreria.NombreClase>")
lObj.<NombreProceso> <Parámetros>
Código ejemplo
Tenemos un proyecto con la siguiente clase:
Public Class Procesos Public Sub mensaje() MsgBox("MENSAJE A MOSTRAR") End Sub Public Sub crearPedido(ByVal gcn As Object, ByVal IdCliente As String, ByVal IdArticulo As String, ByVal Cantidad As Double) Dim lPed = gcn.obj.dameobjStr("Pedido") With lped .propiedades("IdCliente") = IdCliente .update() Dim lLinea = lPed.objetos("Pedido_Lineas").add llinea.propiedades("IdArticulo") = IdArticulo llinea.propiedades("Cantidad") = Cantidad llinea.update() .show() End With End Sub End Class Public Class ConexionCargaLib Private Shared pCn As Object Public Property conexion() As Object Get Return pCn End Get Set(ByVal value As Object) pCn = value End Set End Property End Class
Para llamarla desde el ERP se realizaría de la siguiente forma:
Set lObj = CreateObject ("Prueba_ExternoNet.Procesos") lObj.mensaje lObj.crearPedido gcn, "00001", "0", 25
En este ejemplo se mostraría un mensaje y se crearía un pedido.
Los pasos para generar una dll desde .net y poder utilizarla en el ERP son los siguientes:
Crear un Proyecto de Biblioteca de Clases en Visual Studio
En dicho Proyecto, marcar “Registrar para interoperatividad COM”
Una vez generada la dll de VS, copiarla en la carpeta donde está instalado el ERP, normalmente
C:\Program Files (x86)\AHORA Freeware ERP\Lib
Registar la librería de la siguiente forma:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe " C:\Program Files (x86)\AHORA Freeware ERP \lib\NOMBRELIBRERIA.dll" /tlb:NOMBRELIBRERIA.tlb /codebase
En nuestro ejemplo, el Código de la DLL de .NET es el siguiente
- Para llamarla desde el ERP sería de la siguiente manera:
Sub Main() frmAux.Descargar 'ATENCIÓN: DEBE ESTAR SIEMPRE QUE NO SE MUESTRE EL FORMULARIO. Set lPrueba = CreateObject("ClassLibrary1.Class1") lPrueba.MensajeDLL End Sub
Y el resultado es el siguiente:
Procedimiento C#:
A partir de la versión 5.0 la referencia la realizamos siguiendo uno de los procedimientos que nos permite C#.
Para este ejemplo crearemos una librería externa (LibreriaExterna.dll) a la que referenciaremos uno de sus métodos.
Primero creamos la propia librería en sí de tipo .NET 6 (anteriormente .NET Core):
Para este ejemplo creamos sobre la propia librería una clase y un método que lo único que hará será devolvernos el parámetro que le pasemos con texto añadido:
Importante recalcar que necesitaremos el nombre de la dll, nombre de la clase y nombre del método.
Compilamos para generar la dll y la dejamos en una ruta a la que tengamos permiso y acceso, para este ejemplo en la raíz de C:
El script que creamos para enlazarlo es el siguiente:
namespace AhoraScriptsVacia { public class Script_0 : AhoraOCX.AhoraBaseScript { public void Main() { string dllExterna = @"C:\LibreriaExterna\LibreriaExterna.dll"; var assembly = System.Reflection.Assembly.LoadFile(dllExterna); var type = assembly.GetType("LibreriaExterna.ClaseExterna"); // namespace.clase var obj = System.Activator.CreateInstance(type); var metodo = type.GetMethod("DameTextoExterno"); var result = metodo.Invoke(obj, new object[] { "Texto Interno Parámetro" }); AhoraCore.VBA.Interaction.MsgBox(result.ToString()); } } }
La ejecución de este script nos devuelve efectivamente el método externo con el parámetro que hemos llamado:
Tengan en cuenta que este es un procedimiento estándar de C# y este tiene todo tipo de posibilidades para conectar con cualquier tipo de DLL.
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo